我在hadoop中运行一个解析作业,源代码是一个11gb的map文件,其中大约有900000个二进制记录,每个记录代表一个html文件,map提取链接并将它们写入上下文。我没有为这份工作写减速机。
当我在较小的文件上运行它时,大约5gb,大约500000条记录,它工作正常。
这是一个单机集群
输出大约有1亿条记录,文字
在计划的200项Map任务中,有11项失败。
我正在用hadoop0.22.0运行
我得到以下错误:
org.apache.hadoop.mapreduce.task.reduce.shuffle$shuffleerror:org.apache.hadoop.mapreduce.task.reduce.shuffle.run(shuffle)的fetcher#1中的shuffle错误。java:124)在org.apache.hadoop.mapred.reducetask.run(reducetask。java:362)在org.apache.hadoop.mapred.child$4.run(child。java:223)位于java.security.accesscontroller.doprivileged(本机方法)javax.security.auth.subject.doas(主题。java:396)在org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation。java:1153)在org.apache.hadoop.mapred.child.main(child。java:217)原因:java.lang.outofmemoryerror:org.apache.hadoop.io.BoundedByTearYoutPutStream的java堆空间。(BoundedByTearYoutPutStream)。java:58)在org.apache.hadoop.io.boundedbytearrayoutputstream。(boundedbytearrayoutputstream。java:45)在org.apache.hadoop.mapreduce.task.reduce.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>
有人知道怎么修吗?谢谢您!
1条答案
按热度按时间e0bqpujr1#
默认情况下,此错误由mapreduce.reduce.shuffle.memory.limit.percent引起
为了解决这个问题,我限制了reduce的shuffle内存使用:配置单元:
MapReduce:
洗牌错误解决方案