在安装好hadoop2.2.0集群后,依次执行start-dfs.sh和start-yarn.sh脚本启动hadoop相关的服务。各个服务均能正常启动。但是过了一段时间后会发现nodemanager会自动失败退出。
检查日志信息发现一直报本机与一个0.0.0.0的连接失败,然后继续与进行通信尝试一段时间后nodemanager失败。具体信息如下:
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.ConnectException: Call From node2/222.18.159.123 to 0.0.0.0:8031 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
Caused by: java.net.ConnectException: Call From node2/222.18.159.123 to 0.0.0.0:8031 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
通过检查配置文件知道8031端口出现在yarn-site.xml配置文件的yarn.resourcemanager.scheduler.address配置项中。yarn.resourcemanager.scheduler.address 是resourcemanager暴漏给nodemanager的地址和端口。nodermanager利用这个地址通过心跳机制与RM通信。
正常情况下我的NM应该与RM通信,但是NM却一直与0.0.0.0通信.因此查阅官方默认的yarn-site.xml配置文件,发现其中yarn.resourcemanager.hostname的默认值被设置成:0.0.0.0了(怪不得一直与0.0.0.0通信)。发现原来是我设置的主机ip在这里没有生效。
在yarn-site.xml中添加一项新的项,将yarn.resourcemanager.hostname的值修改为master机器的ip地址。
重启hadoop服务,一切正常!!!
注:nodemanager启动后要通过心跳机制定期与RM通信,否则RM会认为NM死掉,会停止NM的服务。
同时通过这次失败提醒出现问题要多去尝试(我几乎把网上的方法试了个遍。。。。。。)多参考官方文档。