【问题标题】:Hadoop error in shuffle in fetcher#1fetcher#1 中随机播放的 Hadoop 错误
【发布时间】:2013-11-06 21:58:49
【问题描述】:

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

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

我收到以下错误:

org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: 错误 在 fetcher#1 中随机播放 org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(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(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1153) 在 org.apache.hadoop.mapred.Child.main(Child.java:217) 引起: java.lang.OutOfMemoryError:Java 堆空间位于 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>

有人知道如何解决吗? 谢谢!

【问题讨论】:

  • 你能分享你的映射器代码吗?错误消息看起来您遇到了内存问题,这可能意味着您的 Key 或 Value 对象可能很大。您的 Map 输出的 Key 和 Value 类型是什么?
  • 嗨,克里斯,我知道有一个任务会消耗大量内存的潜在问题。通过读取映射文件并运行该函数,我在 java 应用程序上运行了相同的任务,它完成了所有记录而没有任何内存问题。此外,异常是使 Reducer 任务失败,而不是 Mappper 任务。谢谢

标签: hadoop mapreduce


【解决方案1】:

这个错误默认是由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");

shuffle error solution

【讨论】:

  • 这是一种在一定程度上可以正常工作的解决方法。即使达到了这些限制,它也会出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
相关资源
最近更新 更多