12
[hadoop-1.0.2] → hadoop jar hadoop-examples-1.0.2.jar wordcount /user/abhinav/input     /user/abhinav/output
Warning: $HADOOP_HOME is deprecated.

****hdfs://localhost:54310/user/abhinav/input
12/04/15 15:52:31 INFO input.FileInputFormat: Total input paths to process : 1
12/04/15 15:52:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for     your platform... using builtin-java classes where applicable
12/04/15 15:52:31 WARN snappy.LoadSnappy: Snappy native library not loaded
12/04/15 15:52:31 INFO mapred.JobClient: Running job: job_201204151241_0010
12/04/15 15:52:32 INFO mapred.JobClient:  map 0% reduce 0%
12/04/15 15:52:46 INFO mapred.JobClient:  map 100% reduce 0%

我已经使用本指南在单个节点上设置了 hadoop (http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#run-the-mapreduce -job),我正在尝试运行提供的示例,但我被困在地图 100% 减少 0% 上。这可能是什么原因造成的?

4

9 回答 9

14

首先,打开您的作业跟踪器并查看空闲减速器插槽的数量和其他正在运行的作业 - 是否有另一个正在运行的作业正在消耗所有可用的减速器插槽。

一旦您向自己证明有一些免费的减速器插槽可用于为您的作业运行减速器,请在作业跟踪器 web ui 中找到您的作业并单击它以将其打开。您现在应该能够看到已完成的映射器的数量 - 确保这表明您没有正在运行的映射器。控制台中的 % complete 有时会出现问题,您可能有一个正在提交的映射器说它是 100%,但最终确定有问题。

一旦您对所有映射器都已完成感到满意,请查看正在运行的减速器的数量 - 这是否显示为 0?如果不是,它显示一些正在运行 - 单击正在运行的减速器的数量以显示正在运行的减速器页面,现在单击一个实例,直到您获得查看减速器日志的选项。您需要查看此减速器的所有日志(不是第一个/最后一个 100k)。这应该告诉你你的减速器实际上在做什么——很可能试图将结果从映射器复制到减速器节点。我想这是您的问题所在,网络或磁盘空间之一,但无论如何,最终hadoop应该使reducer实例失败并重新安排它在另一个节点上运行。

于 2012-04-15T23:24:49.707 回答
4

我在运行 Suse 11 的主机上也遇到了这个问题。正如上面 Chris 所说,问题出在映射器上。为了解决这个问题,我编辑了 /etc/hosts 文件并删除了主机的 IP 地址。例如在 /etc/hosts

Ip.address.of.your.host      hostname

改成

127.0.0.1                    hostname

完成上述更改并重新启动后,我就可以运行 wordcount 程序

于 2012-09-10T12:23:13.180 回答
4

导致此问题的原因可能有很多,最合理的原因是您的映射器中有错误(异常,无限循环,...)

调试:

  • 登录到 localhost:50030,您应该会看到您的工作列表。找到您失败的作业(您的 ID 是 job_201204151241_0010),然后查看跟踪(不要忘记单击“全部”,否则您将看不到完整的日志)。
  • 查看您的日志磁盘,它们应该在 /usr/lib/hadoop/logs 或类似的目录下(您必须参考您的配置才能找到),并使用 grep 查找错误消息cat /path/to/logs/*.log | grep ERROR并查看是否返回某些内容。

如果没有任何结果,我建议您将日志消息放入映射器中,以便在每一步手动调试发生的情况(假设它在伪分布式模式下运行)。

让我知道情况如何。

编辑:正如 Chris 所说,reducer 为 0%,所以问题实际上出在 reduce 步骤之前。

于 2012-04-15T22:05:18.387 回答
2

我在 Mac 10.7.4 上运行伪集群时看到了同样的问题。当我从睡眠模式中醒来时会发生这种情况。看起来映射器 IP 地址已在唤醒时重新定义:

syslog:2012-09-14 16:52:06,542 WARN org.apache.hadoop.mapred.ReduceTask: attempt_201209141640_0003_r_000000_0 copy failed: attempt_201209141640_0003_m_000000_0 from 172.19.131.144
syslog:2012-09-14 16:52:06,546 INFO org.apache.hadoop.mapred.ReduceTask: Task attempt_201209141640_0003_r_000000_0: Failed fetch #1 from attempt_201209141640_0003_m_000000_0

因此,从睡眠模式唤醒后,通过 stop-all.sh 和 start-all.sh 重新启动 hadoop 为我解决了这个问题。

于 2012-09-15T00:15:58.313 回答
1

如果您使用的是 Linux 并且您使用的是单节点 hadoop:转到目录 /etc/hosts 使用这种格式更改您的 IP 地址

你的 IP 地址主机 你的 IP 地址从机

转到 /hadoop/conf 目录打开 masters 并在此输入 localhost(删除所有其他地址!)打开 slaves 并在此设置 localhost(删除所有其他地址!)

现在,再次运行您的程序,它应该可以正常工作。

于 2014-04-22T16:49:24.647 回答
1

我也遇到了这个问题。但我确实像这样编辑文件 etc/hosts:

Ip.address.of.your.host      hostname   

只需在上面的下面添加一行,如下所示

127.0.1.1     hostname

您应该注意到它是 127.0.1.1(而不是 127.0.0.1),否则之后您会遇到“连接到主机 some_hostname 端口 22:连接超时”之类的问题

于 2013-12-28T13:30:49.990 回答
1

我可能找到了“地图 100% 减少 0%”问题的另一个原因。

我的地图任务会生成大量记录,并且我在伪集群环境中运行 hadoop。

我检查了 map 任务日志,似乎 map 100% 和 reduce 开始之间的时间用于合并中间段。

2013-07-27 03:09:55,302 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 334
2013-07-27 03:10:15,166 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 325
2013-07-27 03:10:35,603 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 316
...
2013-07-27 03:26:18,738 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 28
2013-07-27 03:29:50,458 INFO org.apache.hadoop.mapred.Merger: Merging 10 intermediate segments out of a total of 19
2013-07-27 03:33:48,368 INFO org.apache.hadoop.mapred.Merger: Down to the last merge-pass, with 10 segments left of total size: 4424592099 bytes

此过程可能需要很长时间,具体取决于段的大小和数量以及磁盘的读/写速度。

除了日志之外,您可以通过检查机器的磁盘使用情况来判断这种情况正在发生,因为大量数据正在合并到新文件中,所以磁盘使用率会一直很高。我什至可以注意到,这些段在合并后被删除,因为磁盘使用量波动,在合并期间增加,在删除期间减少。

于 2013-07-27T17:29:36.910 回答
0

我遇到了类似的问题(不一样)。我的任务卡在 100% Map 和 16% Reduce 上。我遇到了这个问题好几个小时(对于不同的程序:grep、wordcount 等),直到我碰到这个线程并查看了 Chris 的答案——这基本上提出了一种调试或查明问题的好方法面临的问题。(显然我没有声望投票赞成他的答案,因此这篇文章)。

在查看作业跟踪器的 Web UI 并导航到确切的任务线程的日志文件(我不知道该日志存在)后,我发现我的 JobTracker 无法解析数据节点的主机名。我将 (ip, hostname) 对添加到我的 hosts 文件中,卡住的任务恢复了活力并成功完成。

于 2013-05-18T18:17:25.053 回答
0

我遇到了类似的问题,问题是减速器任务没有空间。所以我释放了内存。最好的办法是查看 jobtracker 日志:50030/logs/hadoop-hadoop-jobtracker-localhost.localdomain.log。日志消息:“WARN org.apache.hadoop.mapred.JobInProgress:没有空间用于减少任务。节点 tracker_localhost.localdomain:localhost.localdomain/127.0.0.1:57829 有 778543104 字节可用;但我们预计减少输入需要 1160706716”

于 2013-06-19T21:52:29.273 回答