Hadoop WordCount示例卡在地图上100%减少0%

Abh*_*rma 12 hadoop mapreduce

[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%
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ite 14

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

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

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

  • 很棒的提示.我按照这个指示,发现我的问题是Windows防火墙不让文件从映射器运行的节点传输到reducer尝试运行的节点(即使它是完全相同的物理机器). (2认同)

Cha*_*guy 4

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

调试:

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

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

让我知道进展如何。

编辑:正如 Chris 指出的,reducer 的值为 0%,因此问题实际上出在 reduce 步骤之前。

  • 如果reducer处于0%,则reducer尚未进入reduce阶段(它仍在等待复制数据),因此这不是用户reducer实现中的错误 (2认同)