在fetcher#1中的shuffle中出现hadoop错误

uqdfh47h  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(414)

我在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>

有人知道怎么修吗?谢谢您!

e0bqpujr

e0bqpujr1#

默认情况下,此错误由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");

洗牌错误解决方案

相关问题