Reduce 任务被 Hadoop 多节点 (10x) 集群中的太多获取失败消息停止

The reduce task is stopped by Too Many Fetch Failure message in Hadoop multi node (10x) cluster

我将 Hadoop 1.0.3 用于一个 10 桌面集群系统,每个系统都有 Ubuntu 12.04LTS 32 位 OS。 JDK 是 7 u 75。每台机器有 2 GB RAM 和核心 2-duo 处理器。

对于一个研究项目,我需要 运行 一个类似于 "Word Count" 的 hadoop 作业。我需要 运行 对大量数据集执行此操作,例如至少 1 GB 的大小。

我正在尝试使用 hadoop 的示例 jar hadoop-examples-1.0.3.jar 来计算输入数据集的单词数。不幸的是,我无法 运行 任何具有超过 5-6 MB 输入数据的实验。

对于输入,我使用来自 https://www.gutenberg.org. Also I used some rfcs from https://www.ietf.org 的纯文本共振峰故事书。所有输入均为.txt格式英文书写。

我的系统可以为单个 .txt 文档提供正确的输出。但是,当它有超过 1 个 .txt 文件时,它开始不断给出错误:

INFO mapred.JobClient: Task Id :      attempt_XXXX, Status : FAILED
Too many fetch-failures

当我使用单节点集群时,数据集也能正常工作。我从以前的 Whosebug posts for example this one and this one 那里得到了一些解决方案,还有更多。但其中 none 对我的情况有效。根据他们的建议,我更新了我的 /usr/local/hadoop/conf/mapred-site.xml 文件,如下所示:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
  <name>mapred.job.tracker</name>
  <value>master:54311</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.task.timeout</name>
  <value>1800000</value> 
</property>
<property>
  <name>mapred.reduce.slowstart.completed.maps</name>
  <value>0.9</value> 
</property>
<property>
  <name>tasktracker.http.threads</name>
  <value>90</value> 
</property>
<property>
  <name>mapred.reduce.parallel.copies</name>
  <value>10</value> 
</property>
<property>
  <name>mapred.map.tasks</name>
  <value>100</value> 
</property>
<property>
  <name>mapred.reduce.tasks</name>
  <value>7</value> 
</property>
<property>
  <name>mapred.local.dir</name>
  <value>/home/user/localdir</value> 
</property>

</configuration>

在这个文件中,我从 michael-noll's blog 中收集了 属性 的值:“mapred.local.dir”、“mapred.map.tasks”、“mapred.reduce.tasks”。我也设置了,

export HADOOP_HEAPSIZE=4000

来自 conf/hadoop-env.sh 文件。

由于我已经将所有10台机器的环境设置为hadoop-1.0.3,如果有人能在不更改hadoop版本的情况下给我解决方案,对我来说会更有帮助。

另外我想提一下我是hadoop的新手。我发现了很多关于 hadoop 的文章,但我可以将任何文章修改为该主题的标准。如果有人知道关于 hadoop 的任何信息丰富且真实的文章,请随时与我分享。

提前谢谢大家。

我的问题现在已经解决了。实际上问题出在我的网络设置中。不幸的是,由于我的网络设置错误,Hadoop系统在reduce时无法找到正确的机器。

正确的网络设置应该是:

在 /etc/hosts 文件中应包含以下信息:

localhost 127.0.0.1

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

master 192.168.x.x
slave1 192.168.x.y
....

并且在文件中/etc/hostname

我们应该只提及写在主机文件中的主机名。例如,在 master 机器中,我们应该在主机名文件中只写一个单词。它是:

master

对于机器 slave1,文件应包含:

slave1