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

标签 java linux ubuntu hadoop distributed

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

对于一个研究项目,我需要运行一个类似于“字数统计”的 hadoop 作业。我需要对大量数据集运行此操作,例如至少 1 GB 的大小。

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

对于输入,我使用来自 https://www.gutenberg.org 的纯文本共振峰故事书.我还使用了来自 https://www.ietf.org 的一些 rfc。 .所有输入均为.txt格式英文书写。

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

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

当我使用单节点集群时,数据集也能正常工作。我从以前的 stackoverflow 得到了一些解决方案帖子例如this onethis one还有更多。但这些都不适合我的情况。根据他们的建议,我更新了/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

关于java - Reduce 任务被 Hadoop 多节点 (10x) 集群中的太多获取失败消息停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30627492/

相关文章:

java - 构建 Android 源代码时如何修复 JDK 未找到错误?

java - 如何配置log4j 2's additivity to respect parent' s级别?

c - 直接从无窗口的 Linux 终端启动 OpenGL 应用程序

linux - 如何只替换 Perl 中 IP 地址的前三个八位字节

php - 错误 : Couldn't open PDF file 'MJVQKFFGFEPBI.TMP' for writing (permission denied)

bash - 在 Ubuntu 中转换音频文件的采样率的脚本

java - Swing:显示悬停在另一个面板上的透明面板

java - 在 if 语句中比较一个 int 和多个 int

java - 无法从 Java 中的 ArrayList 访问对象的方法

linux - 语言环境如何在 Linux/POSIX 中工作以及应用了哪些转换?