hadoop - Hadoop-示例jar中包含的示例无法在伪分布式模式下完成

标签 hadoop mapreduce

映射存在一些问题,可以减少在伪分布式模式下运行。我在Linux上运行1.2.1版。我有:
1.创建$ JAVA_HOME和$ HADOOP_HOME并将相对bin目录添加到路径中;
2.格式化dfs;
3.执行start-dfs.sh和start-mapred.sh。

执行jps似乎显示了应该运行的所有运行状态(我认为)。

[paul@lt001 bin]$ jps
8724 TaskTracker
8487 SecondaryNameNode
8841 Jps
8353 DataNode
7239 NameNode
8597 JobTracker

然后,我尝试运行wordcount和pi示例,结果类似,例如:
[paul@lt001 bin]$ hadoop jar hadoop/hadoop-examples-1.2.1.jar pi 4 1000
Warning: $HADOOP_HOME is deprecated.

Number of Maps  = 4
Samples per Map = 1000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Starting Job
13/11/18 10:31:38 INFO mapred.FileInputFormat: Total input paths to process : 4
13/11/18 10:31:39 INFO mapred.JobClient: Running job: job_201311181028_0001
13/11/18 10:31:40 INFO mapred.JobClient:  map 0% reduce 0%
13/11/18 10:31:47 INFO mapred.JobClient:  map 50% reduce 0%
13/11/18 10:31:52 INFO mapred.JobClient:  map 100% reduce 0%

在每种情况下,输出到达 map 都会100%减少0%阶段,然后停转。无论我等待多长时间,工作都无法继续进行。我已经检查了日志,我怀疑一个日志指示问题是hadoop-paul-tasktracker-lt001.log,它具有以下输出:
2013-11-18 10:31:55,969 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:34:59,148 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:35:05,196 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 10:35:11,253 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 

..........

2013-11-18 11:10:03,259 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:06,290 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:12,320 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:18,343 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:21,369 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:27,395 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:33,426 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy > 
2013-11-18 11:10:36,463 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201311181028_0001_r_000000_0 0.0% reduce > copy >

这似乎是与此处相同的问题:

Running Hadoop examples halt in Pseudo-Distributed mode

检查了JobTracker网页上的状态,此运行显示4个已完成的 map task 和1个运行(40分钟后完成0%)的缩小任务。

似乎卡在reduce> copy>上,但是为什么呢?谁能帮忙寻找下一个地方?

更新

我想我还有更多信息。如果我看运行中的reduce任务
(http://localhost:50030/taskdetails.jsp?tipid=task_201311201256_0001_r_000000)

我看到它已分配给机器/default-rack/hit-nxdomain.opendns.com

如果然后我尝试单击“最后4KB任务日志”链接,它会将我发送至
http://hit-nxdomain.opendns.com:50060/tasklog?attemptid=attempt_201311201256_0001_r_000000_0&start=-4097

将该网址修改为
http://localhost:50060/tasklog?attemptid=attempt_201311201256_0001_r_000000_0&start=-4097

然后显示包含以下示例的日志:
2013-11-20 14:59:54,726 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2013-11-20 14:59:54,726 INFO org.apache.hadoop.mapred.ReduceTask: hit-nxdomain.opendns.com Will be considered after: 814 seconds.
2013-11-20 15:00:54,729 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201311201256_0001_r_000000_0 Need another 4 map output(s) where 0 is already in progress
2013-11-20 15:00:54,729 INFO org.apache.hadoop.mapred.ReduceTask: attempt_201311201256_0001_r_000000_0 Scheduled 0 outputs (1 slow hosts and0 dup hosts)
2013-11-20 15:00:54,730 INFO org.apache.hadoop.mapred.ReduceTask: Penalized(slow) Hosts: 
2013-11-20 15:00:54,730 INFO org.apache.hadoop.mapred.ReduceTask: hit-nxdomain.opendns.com Will be considered after: 754 seconds.

因此,似乎hadoop认为任务正在hit-nxdomain.opendns.com主机上运行。

主机(本地主机)通过将路由器设置为DNS服务器的DHCP来选择其DNS设置。路由器依次使用opendns.com解析外部地址。

我认为这是DNS问题是否正确?

知道hadoop如何以该主机名结尾吗?

知道如何解决吗?

最佳答案

这确实是DNS问题(反向查找有问题)。解决方法如下:

检查任务日志中的“已停止”任务(via http://localhost:50030/)。这显示了DNS的问题。

我发现堆栈溢出post建议使用

hadoop-dns-checker

这表明,虽然对localhost的查找/反向查找很好,但对主机名的查找却不起作用。解决此问题已解决。

实际的问题是主机通过与(dnsmasq)dns服务器分开的DHCP(通过路由器)获取IP。因此,它没有在DNS服务器上注册主机名。因此,dns服务器将dns查找传递给我们的dns提供程序的上游,并返回了“虚拟” IP地址,然后将其解析为opendns“未找到”主机名。 MapReduce使用此主机名作为reduce任务的主机名。启用dnsmasq dhcp并在路由器上清除该问题即可解决此问题-主机现在从dnsmasq获取其IP地址,并将其主机名注册到DNS服务器。 DNS查找和反向查找现在可用于localhost和主机/主机名。

关于hadoop - Hadoop-示例jar中包含的示例无法在伪分布式模式下完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097573/

相关文章:

java - hadoop,在hadoop-env.sh中设置JAVA_HOME

hadoop - CqlInputFormat中的Hadoop Cassandra宽行

hadoop - HDFS 中组和角色的使用

hadoop - 如何将作业移动到Hadoop中的另一个队列

hadoop - 在Amazon Elastic MapReduce和S3中读取参数文件

hadoop - 为什么数据本地化不适用于Map Reduce流程中的排序和混洗阶段?

hadoop - 如何在 Docker Swarm 中设置 Hadoop?

hadoop - 我可以使用alter table将子列添加到配置单元结构列吗?

hadoop - Caused by : java. lang.ClassCastException : org. apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text

java - Mapreduce:NLineInputFormat 抛出错误