Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError:

hadoop执行JOB在reduce阶段报了下面的错误:

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:121) 
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:380) 
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:165) 
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:1491) 
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:160) 
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:297) 
at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:287) 
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:411) 
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:341) 
at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:165)



解决方法:

修改mapred-site.xml配置中的mapreduce.reduce.shuffle.memory.limit.percent参数

<property>
   <name>mapreduce.reduce.shuffle.memory.limit.percent</name>
  <value>0.25</value>
  <description>Expert: Maximum percentage of the in-memory limit that a
  single shuffle can consume</description>
</property>


这个值默认是0.25,可以根据需要适当的减小这个值。

猜你喜欢

转载自tangjunliang.iteye.com/blog/2024510
今日推荐