知识点

相关文章

更多

最近更新

更多

[Hadoop Err] Call to ? failed on local exception: java.net.NoRouteToHostException: No route to host

2019-03-28 13:47|来源: 网络

表现:

如果你 grep datanode 的 log 发现了这个 Error,原文如下:

Hadoop-hadoop-tasktracker-slave1.hadoop.log.2011-01-25:2011-01-25 23:00:53,810 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Call to namenode/192.168.17.128:9001 failed on local exception: java.net.NoRouteToHostException: No route to host

那么基本上你的 reduce 不太可能会成功,在 name node 的 console 里每当执行到 reduce 的时候会报出这种错误:

Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out

 

原因:

这可能是由于你的 hostname 域名和 /etc/hosts中配置的虚拟域名不一致引起的。因为 hadoop 使用配置文件中定义的”master“和"slave"域名,并在/etc/hosts中找到相关的ip地址来进行引用的。而 Map-Reduce 或任何 Hadoop class 又可能使用机器名 hostname 来进行引用。我这边的情况是我的 master 的 hostname 是 master.hadoop 而在 /etc/hosts 中我定义的虚拟域名是 namenode,而我的 slave 的 hostname 是 slave1.hadoopslave2.hadoop,而在 /etc/hosts 中我定义的虚拟域名是 datanode1datanode2

 

解决方案:

方法1:修改hostname 和 /etc/hosts 里的虚拟域名一致,在我的case里,我需要把master机器的hostname改成‘namenode’,把slave机器的hostname分别改成‘datanode1’和‘datanode2’

方法2:如果由于种种原因你没法修改域名(域名已经在其他地方被使用,比如这台机器同时是一台文件服务器或者因特网服务器),你可以修改 /etc/hosts 来为每个记录增加一个和其域名一致的域名别名(domain name alias) 。根据我的case,我应该把 /etc/hosts 文件改成这样: 

xxx.xxx.xxx.xxx    namenode    master.hadoop
xxx.xxx.xxx.xxx    datanode1   slave1.hadoop
xxx.xxx.xxx.xxx    datanode2   slave2.hadoop

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多