我在 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.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:124) 的 org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:124) 的 fetcher#1 中的随机播放错误.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) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1153) at org.apache.hadoop.mapred.Child.main(Child.java: 217) 原因:java.lang.OutOfMemoryError:org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:45) 处 org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:58) 处的 Java 堆空间在 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>
任何人都知道如何解决它?谢谢!