我正在hadoop中运行解析作业,源是一个11GB的映射文件,其中大约有900,000个二进制记录,每个记录代表一个HTML文件,地图提取链接并将它们写入上下文。 我没有为这份工作写的减速机。
我收到以下错误:
org.apache.hadoop.mapreduce.task.reduce.Shuffle $ ShuffleError:错误 在收集者#1中随机播放 org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:124) 在org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:362)at org.apache.hadoop.mapred.Child $ 4.run(Child.java:223)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:1153) 在org.apache.hadoop.mapred.Child.main(Child.java:217)引起: java.lang.OutOfMemoryError:Java堆空间at org.apache.hadoop.io.BoundedByteArrayOutputStream。(BoundedByteArrayOutputStream.java:58) 在 org.apache.hadoop.io.BoundedByteArrayOutputStream。(BoundedByteArrayOutputStream.java:45) 在 org.apache.hadoop.mapreduce.task.reduce.MapOutput。(MapOutput.java:104) 在 org.apache.hadoop.mapreduce.task.reduce.MergeManager.unconditionalReserve(MergeManager.java:267)
这是我的mapreduce-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Hadp01:8012</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
<property>
<name>mapred.local.dir</name>
<value>/BigData1/MapReduce,/BigData2/MapReduce</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1536m</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>300</value>
</property>
<property>
<name>io.sort.mb</name>
<value>300</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>tasktracker.http.threads</name>
<value>80</value>
</property>
</configuration>
任何人都知道如何修复它? 谢谢!
答案 0 :(得分:4)
默认情况下由mapreduce.reduce.shuffle.memory.limit.percent引起的此错误
mapreduce.reduce.shuffle.memory.limit.percent=0.25
要解决此问题,我限制了reduce的shuffle内存使用情况: 配置单元:
set mapreduce.reduce.shuffle.memory.limit.percent=0.15;
的MapReduce:
job.getConfiguration().setStrings("mapreduce.reduce.shuffle.memory.limit.percent", "0.15");