我将 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 one和 this 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/