복붙노트

[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. ==============================

    1.그래서 예를 들어, 출력하고자 (출력 키로) 값의 공백으로 구분 된 목록으로 특정 키에 대한 값, 출력 값으로 빈 텍스트.

    그래서 예를 들어, 출력하고자 (출력 키로) 값의 공백으로 구분 된 목록으로 특정 키에 대한 값, 출력 값으로 빈 텍스트.

    이것에 대한 귀하의 출력 형식 (이 당신의 감속기 코드에있을 것입니다) 다음과 같은 키 / 값을 줄일 소비 것입니다 :

    for (Text value : values) {
        multipleOutputs.getCollector("adjvertex", reporter)
           .collect(key, value);
    }
    

    실제 recordWriter는 로직 트리거로 키를 사용합니다 :

    키는 이전에 전달 된 키 다르다고 전달 될 때, 아웃 폐쇄 될 기록되기 이전 기록 (예 개행 다음 탭 쓰기). 이전 키가 업데이트 될 새로운 값을 출력 스트림에 기록.

    키 이전 키와 동일한 경우, 출력 공간은 출력 스트림 값으로 하였다.

    레코드 기록기 가까운 방법에서, 새로운 키가 전달되고 있었던 것처럼 동일한 논리를 수행 (출력 개행 따르는 탭).

    이 말이 바랍니다. 당신이 (레코드 작가의 이전 키 비교가 실패합니다) 사용자 정의 그룹 비교가있을 경우는주의 할 필요가있는 유일한 방법입니다. 또한 이전 키 추적 변수를 업데이트 할 때 키의 깊은 복사본을 만들 기억.

  2. from https://stackoverflow.com/questions/12831076/oom-exception-in-hadoop-reduce-child by cc-by-sa and MIT license