很难受,真的很难受,近一个星期没有睡好觉了,就因为这个问题。用了两天找错误,终于找到了错误。
用了四天来该错误,每一天都是煎熬,锻炼了自己的毅力(值得安慰一下)。由于网上基本上找不到这个错误,
所以才搞了这么久,这篇博客两个意义
其一:自己做笔记,记录错误心得,以及解决问题的思路。
其二:分享一下,帮助其他遇到困难的朋友,少走弯路啊!!!!!!
正文如下:
start-dfs.sh开启集群,在master节点通过jps命令查看,看到NameNode、SecondaryNameNode已启动,在slave节点通过jps命令查看,DataNode也已经启动。
但是通过hdfs dfsadmin -report 你会发现并没有datanode节点的信息,难过不。找问题
这些错误会有影响,先看看:1:相互能ping同 2:相互ssh免密(这里我使用的是非root用户登录) 3:防火墙iptables关闭 4:set enforce = 0
以上问题依次检查后重试start-dfs.sh后hdfs dfsadmin -report 查看,如果能成功恭喜你小错误。如果不能还是0节点,难过不,就问你难过不。
还有解决办法接着来:看了大量的资料和博客,很多人都提到了端口监听状态在开启集群状态下监听9000端口:
netstat -an | grep 9000查看如下:
tcp 0 0 192.168.1.2:9000 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.2:9000 192.168.1.3:36686 ESTABLISHED
tcp 0 0 192.168.1.2:9000 192.168.1.4:45568 ESTABLISHED
tcp 0 0 192.168.1.2:44570 192.168.1.2:9000 TIME_WAIT
tcp 0 0 192.168.1.2:44568 192.168.1.2:9000 TIME_WAIT
如若不是上面类型,是127.0.0.1被监听,而不是你自己设置的ip,恭喜你可以改错了:最简单的修改将/etc/hosts下原来的地址注释了只写集群的映射关系:
192.168.1.2 hadoop2
192.168.1.3 hadoop3
192.168.1.4 hadoop4
其实原来的影响不大,只要你不乱改,再次重启查看,如果自己是自己ip监听,如果有节点,恭喜啊,问题解决,大吉大利。要是还没有解决,难过不,难过不!就问你难不难过!!
不急我们再来,万事开头难,中间难,结束难。
##权限问题##
hadoop结群的访问权限问题:如果你在每台机器上重新建立了用户,并且用户名还不同,会有问题的——权限问题
例如namenode为hadoop2用户,其它节点为hadoop3,hadoop4:master与slave之间通信正常,互相可以ping通,master的命令可以向slave下发,slave接收到启动命令,开始启动DataNode,并在启动成功后,向master节点发送心跳信息。在正常情况下,master接收到心跳信息,记录该节点的DataNode为正常,可以讲hdfs上的数据复制到该节点,并能够在该节点进行运算。
但是我这里的slave的心跳信息不能够传递给master,所以master认为该节点不存在!!因为你的namenode使用hadoop2用户,那么namenode的文件所有权属于hadoop2,当hadoop3、4返回心跳时,或者读取hadoop2文件时,会出现无权限问题。死得不明不白。
解决办法,不同的集群节点使用相同的用户(当然你也可以赋予权限),例如namenode为hadoop,那么datanode都为hadoop用户,完美解决,那个高兴啊!!!!!!!朋友如果你还没解决,很抱歉,你应该更难过!!!努力再看看吧!
这个错误我找了四天,在许多帮助下,共同完成,我很感谢帮助我的人。改正错误是使人进步的必要因素,与君共勉。