首先我查看NameNode没有发现错误,开始以为是Uuid的问题,以前碰到过,就是Namenode和Datanode的的Uuid不一致,导致不能识别,之后删除 /dfs/name(NameNode)和 /dfs/data(DataNode)的 current文件,这样就可以重新生成uuid,但是依旧有问题
开始怀疑电脑之间不能识别,但是通过SSH,NameNode可以到任何一台DataNode, 每台DataNode还能到其他的DataNode,开始没想到是IP方面不能识别
之后查看 nodeManager的日志,发现如下错误
java.net.NoRouteToHostException: No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:701)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:530)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:494)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:607)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:705)
at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:368)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1521)
at org.apache.hadoop.ipc.Client.call(Client.java:1438)
slaves没有路由可以找到Master
解决方法
1. 首先在Master上ping slave,发现都可以ping通,这是可以找到的
2. 首先在slaves上ping Master,直接ping Master的hostname,发现根本没有办法ping 通,了解到 /etc/hosts里面的设置有问题,发现里面Master的IP写错了,修改修改过来之后,重新运行,正常运行
如果不是这个问题,还有其他的解决方式
1. 查看NameNode的9000端口,(core-site.xml文件中的fs.default.name节点配置)端口是否打开,因为所有的DataNode都要通过这个端口连接NameNode
2. 关闭防火墙,因为防火墙可能会阻止其他的电脑连接。使用以下命令关闭防火墙
service iptables stop