[HADOOP] 하둡에서 OOM 예외가 아이를 감소
HADOOP하둡에서 OOM 예외가 아이를 감소
나는 아이를 줄이기위한 OOM 예외 (Java 힙 공간)을 얻고있다. 감속기, 나는 감속기 프로세스의 출력이 될 것 StringBuilder의 모든 값을 추가하고있다. 값의 수는 많은 수 없습니다. 나는 512M와 1024M에 mapred.reduce.child.java.opts의 가치를 높이기 위해 노력하지만 도움이되지 않습니다. 감속기 코드는 아래와 같습니다.
StringBuilder adjVertexStr = new StringBuilder();
long itcount= 0;
while(values.hasNext()) {
adjVertexStr.append(values.next().toString()).append(" ");
itcount++;
}
log.info("Size of iterator: " + itcount);
multipleOutputs.getCollector("vertex", reporter).collect(key, new Text(""));
multipleOutputs.getCollector("adjvertex", reporter).collect(adjVertexStr, new Text(""));
나는 위의 코드에서 3 개 장소에서 예외를 얻을.
다음과 같이 반복자의 일부 샘플 크기는 : 238695, 1, 13, 673, 1, 1 등이 매우 큰 값이 아니다. 이유는 OOM 예외를 점점 계속합니까? 어떤 도움을 나에게 도움이 될 것입니다.
스택 추적
2012-10-10 21:15:03,929 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 238695
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 13
2012-10-10 21:15:04,190 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,191 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,193 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 673
2012-10-10 21:15:04,195 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:04,196 INFO partitioning.UndirectedGraphPartitioner: Size of iterator: 1
2012-10-10 21:15:09,856 INFO org.apache.hadoop.mapred.TaskLogsTruncater: Initializing logs` truncater with mapRetainSize=-1 and reduceRetainSize=-1
2012-10-10 21:15:09,916 INFO org.apache.hadoop.io.nativeio.NativeIO: Initialized cache for UID to User mapping with a cache timeout of 14400 seconds.
2012-10-10 21:15:09,916 INFO org.apache.hadoop.io.nativeio.NativeIO: Got UserName hduser for UID 2006 from the native implementation
2012-10-10 21:15:09,922 FATAL org.apache.hadoop.mapred.Child: Error running child : java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuilder.append(StringBuilder.java:119)
at partitioning.UndirectedGraphPartitioner$Reduce.reduce(UndirectedGraphPartitioner.java:106)
at partitioning.UndirectedGraphPartitioner$Reduce.reduce(UndirectedGraphPartitioner.java:82)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:519)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
해결법
-
==============================
1.그래서 예를 들어, 출력하고자 (출력 키로) 값의 공백으로 구분 된 목록으로 특정 키에 대한 값, 출력 값으로 빈 텍스트.
그래서 예를 들어, 출력하고자 (출력 키로) 값의 공백으로 구분 된 목록으로 특정 키에 대한 값, 출력 값으로 빈 텍스트.
이것에 대한 귀하의 출력 형식 (이 당신의 감속기 코드에있을 것입니다) 다음과 같은 키 / 값을 줄일 소비 것입니다 :
for (Text value : values) { multipleOutputs.getCollector("adjvertex", reporter) .collect(key, value); }
실제 recordWriter는 로직 트리거로 키를 사용합니다 :
키는 이전에 전달 된 키 다르다고 전달 될 때, 아웃 폐쇄 될 기록되기 이전 기록 (예 개행 다음 탭 쓰기). 이전 키가 업데이트 될 새로운 값을 출력 스트림에 기록.
키 이전 키와 동일한 경우, 출력 공간은 출력 스트림 값으로 하였다.
레코드 기록기 가까운 방법에서, 새로운 키가 전달되고 있었던 것처럼 동일한 논리를 수행 (출력 개행 따르는 탭).
이 말이 바랍니다. 당신이 (레코드 작가의 이전 키 비교가 실패합니다) 사용자 정의 그룹 비교가있을 경우는주의 할 필요가있는 유일한 방법입니다. 또한 이전 키 추적 변수를 업데이트 할 때 키의 깊은 복사본을 만들 기억.
from https://stackoverflow.com/questions/12831076/oom-exception-in-hadoop-reduce-child by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 자바 S3에서 뭐 이따위로 압축 파일을 읽는 방법 (0) | 2019.10.02 |
---|---|
[HADOOP] 루프 사용하여 명령에 인수를 전달합니다 (0) | 2019.10.02 |
[HADOOP] MRJob를 사용하여 여러 매퍼와 다중 입력 (0) | 2019.10.02 |
[HADOOP] 돼지 스크립트에서 정규식 로그에서 문자열을 추출 (0) | 2019.10.02 |
[HADOOP] 하이브 테이블에 새로 추가 된 레코드를 고유 ID 열을 업데이트 (0) | 2019.10.02 |