hadoopjob 메모리 넘침

mapreduce 작업 성능 테스트를 진행할 때, Shuffle에서 자바를 보고합니다.lang.OutOfMemoryError 메모리 오류가 발생했습니다.스택 정보는 다음과 같습니다.
2016-01-23 10:34:42,216 INFO  [main] mapreduce.Job: Task Id : attempt_1453272487300_1980_r_000000_0, Status : FAILED
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#4
        at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.OutOfMemoryError: Java heap space
        at org.apache.hadoop.io.BoundedByteArrayOutputStream.<init>(BoundedByteArrayOutputStream.java:56)
        at org.apache.hadoop.io.BoundedByteArrayOutputStream.<init>(BoundedByteArrayOutputStream.java:46)
        at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.<init>(InMemoryMapOutput.java:63)
        at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.unconditionalReserve(MergeManagerImpl.java:304)
        at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:294)
        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:511)
        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:329)
        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:193)

해결 방법:
프로필mapred-site를 수정합니다.xml, 다음 설정 추가
<property>
 <name>mapreduce.reduce.shuffle.memory.limit.percent</name>
  <value>0.17</value>
</property>

이 설정은 하나의 shuffle가 소모할 수 있는 메모리가reduce의 모든 메모리에서 차지하는 비례를 나타냅니다. 기본값은 0.25입니다.

좋은 웹페이지 즐겨찾기