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

Noa*_*son 6 hadoop mapreduce

我正在hadoop中运行一个解析作业,源是一个11GB的映射文件,其中大约有900,000个二进制记录,每个记录代表一个HTML文件,地图提取链接并将它们写入上下文.我没有为这份工作写的减速机.

  • 当我在较小的文件上运行时,大约5GB,大约500,000条记录,它可以正常工作.
  • 这是一台单机器
  • 输出有大约1亿条记录,TEXT
  • 在200个计划中的11个地图任务之后它失败了.
  • 我正在运行Hadoop 0.22.0

我收到以下错误:

org.apache.hadoop.mapreduce.task.reduce.Shuffle $ ShuffleError:org.apache中org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:124)中的fetcher#1随机播放错误位于javax的java.security.AccessController.doPrivileged(Native Method)的org.apache.hadoop.mapred.Child $ 4.run(Child.java:223)中的.hadoop.mapred.ReduceTask.run(ReduceTask.java:362). org.apache.hadoop.mapred.Child.main上的org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1153)中的security.auth.Subject.doAs(Subject.java:396)(Child.java: 217)由以下原因引起:java.lang.OutOfMemoryError:org.apache.hadoop.io.BedteArrayOutputStream中的Java堆空间.(BoundedByteArrayOutputStream.java:58)org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:45)在org.apache.hadoop.mapreduce.task.reduce.MapOutput.(MapOutput.java:104)at 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>
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何解决它?谢谢!

dol*_*ang 5

默认情况下,此错误是由mapreduce.reduce.shuffle.memory.limit.percent引起的

mapreduce.reduce.shuffle.memory.limit.percent=0.25
Run Code Online (Sandbox Code Playgroud)

若要解决此问题,我限制了我的reduce的随机播放内存使用:配置单元:

set mapreduce.reduce.shuffle.memory.limit.percent=0.15;
Run Code Online (Sandbox Code Playgroud)

MapReduce:

job.getConfiguration().setStrings("mapreduce.reduce.shuffle.memory.limit.percent", "0.15");
Run Code Online (Sandbox Code Playgroud)

改组错误解决方案