[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%。可能导致这种情况的原因是什么?
答案 0 :(得分:14)
首先,打开你的作业跟踪器并查看免费减速器插槽和其他正在运行的作业的数量 - 是否还有另一个正在运行的作业,它会消耗掉所有可用的减速器插槽。
一旦您向自己证明有一些免费的减速器插槽可用于为您的工作运行减速器,请在作业跟踪器web ui中找到您的工作并单击它以打开它。您现在应该能够看到已完成的映射器的数量 - 确保读取您没有正在运行的映射器。控制台中的完成百分比有时会出现,你可能会有一个映射器,它正在提交说它是100%,但是最终确定了问题。
一旦你对所有的映射器都已经完成感到满意,请查看正在运行的减速器的数量 - 这是否显示为0?如果没有,则表明某些正在运行 - 单击正在运行的Reducer的数量以显示正在运行的Reducer页面,现在单击一个实例,直到您获得查看reducer日志的选项。您将要查看此减速器的所有日志(不是第一个/最后一个100k)。这应该告诉你减速器实际上在做什么 - 最有可能试图将映射器的结果复制到reducer节点。我想这就是你的问题,网络或磁盘空间之一,但无论如何,最终hadoop应该将reducer实例失败并重新安排它在另一个节点上运行。
答案 1 :(得分:4)
导致此问题的原因可能有很多,最可信的原因是您的映射器中存在错误(异常,无限循环,......)
调试:
cat /path/to/logs/*.log | grep ERROR
和看看是否会有所回报。如果没有任何结果,我建议您在映射器中放置日志消息,以便在每一步都手动调试(假设它以伪分散模式运行)。
让我知道这是怎么回事。
编辑:正如Chris所说,减速器为0%所以问题实际上在减少步骤之前。
答案 2 :(得分:4)
我在运行Suse 11的主机上也遇到过这个问题。正如Chris上面所说,问题出在映射器上。 为了解决这个问题,我编辑了/ etc / hosts文件并删除了主机的ip地址。 例如在/ etc / hosts
中Ip.address.of.your.host hostname
更改为
127.0.0.1 hostname
一旦我进行了上述更改并重新启动,我就可以运行wordcount程序
答案 3 :(得分: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为我解决了这个问题。
答案 4 :(得分: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:连接超时”
答案 5 :(得分:1)
如果您使用Linux并且使用单节点hadoop : 转到目录/ etc / hosts 使用此格式更改您的IP地址
your-ip-address master 你的ip-address slave
转到/ hadoop / conf目录 打开主人并输入localhost(删除所有其他地址!) 打开奴隶并在此设置localhost(删除所有其他地址!)
现在,再次运行你的程序,它应该可以正常工作。
答案 6 :(得分:0)
我遇到了类似的问题(不一样)。我的任务陷入100%Map和16%Reduce。我面对这个问题已经有好几个小时了(对于不同的程序:grep,wordcount等),直到我碰到这个帖子并查看了Chris的答案 - 这基本上提出了调试或查明人们面临的问题的好方法。 (显然我没有声誉来表达他的答案,因此这篇文章)。
在查看作业跟踪器的Web UI并导航到确切任务线程的日志文件后(我不知道此日志存在),我发现我的JobTracker无法解析datanode的主机名。我将(ip,hostname)对添加到我的hosts文件中,卡住的任务恢复活跃并成功完成。
答案 7 :(得分:0)
我遇到了类似的问题,问题是减速机任务没有空间。所以我释放了记忆。最好的事情是看看jobtracker日志: 50030 /日志/ Hadoop的Hadoop的JobTracker的-localhost.localdomain.log。 日志消息: “WARN org.apache.hadoop.mapred.JobInProgress:没有减少任务的余地。节点tracker_localhost.localdomain:localhost.localdomain / 127.0.0.1:57829有778543104个字节可用;但我们希望减少输入需要1160706716”