前天遇到一个hadoop问题,由于之前都是伪分布的情况,没有真正的涉及到集群的环境,最近按照一些资料自己搭建了一个集群环境,三台虚拟机,一个master,两个slave,利用jps查看节点信息,启动了所有的节点,包括数据节点datanode,但是在Web UI中查看活节点,显示为0,我执行hadoop fs -mkdir /input 成功,毫无疑问,当我执行hadoop fs -put ~/file/file*.txt /input/,时报错了,错误信息是could only be replicatied to 0 nodes, instead of 1,意思就是我的集群设置是至少要又一个1个节点,但是现在检测呆0个节点,
这个时候查看slave上的datannode日志文件,发现下面信息,这个的意思就是slave和master的通信没有成功,slave向发送心跳,没有被master接收懂啊;好了这个时候,我就百度这个问题,天啦,各种瞎搞,什么防火墙啊,-format之类,全部检查了一个遍,各种设置,但是无济于事,这个异常始终存在;
2017-03-31 01:56:05,272 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting
2017-03-31 01:56:05,273 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 50020: starting
2017-03-31 01:56:05,591 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop.master/192.168.62.130:9000
2017-03-31 01:56:10,595 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop.master/192.168.62.130:9000
2017-03-31 01:56:15,599 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop.master/192.168.62.130:9000
2017-03-31 01:56:20,603 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop.master/192.168.62.130:9000
2017-03-31 01:56:25,607 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: hadoop.master/192.168.62.130:9000
直到昨天我用命令,netstat dfsadmin -report 在master节点上查看活节点信息,好了,报错了,错误是(忘记截图了)
Access denied for user 。。。。。。。。。。
意思就是权限问题,然后又开始各种搜索,有说什么ssh,ip的,我都检查了,就是不行,但是最后看到了一个博客,我一看,觉得说的和我的问题没多大关系,估计也解决不了我的问题,但是还是抱着侥幸的心理尝试了一下,解决方法是:
在hdfs-site.xml文件中添加
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
然后再一次重启hadoop,执行netstat dfsadmin -report ,我天,奇迹出现了,我的两个datanode信息,打印出来,WebnUI中也出现了live nodes 为2 ,接下来遍跑通了我的例子,
到此完美解决了我的问题,至于这两句话我不是很理解,看意思false,估计是屏蔽权限,不需要权限吧,所以slave和master通信成功;
这个问题困扰很久,很多方法都试过了,没用,说明我们遇到问题一定要先分析,不能盲目的去试各种方案,因为同一个问题的引发原因有很多,这一点需要具体问题具体分析;