原创

Hadoop中NameNode无法与slave的DataNode通讯

温馨提示:
本文最后更新于 2020年06月24日,已超过 1,403 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

报错如下

2020-06-23 15:08:09,471 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool BP-1842394229-192.168.56.200-1592938709654 (Datanode Uuid 79e1af66-6aa2-475b-aa39-0d5835668937) service to box-master/192.168.56.200:9000 Datanode denied communication with namenode because hostname cannot be resolved (ip=192.168.56.102, hostname=192.168.56.102): DatanodeRegistration(0.0.0.0:50010, datanodeUuid=79e1af66-6aa2-475b-aa39-0d5835668937, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-57;cid=CID-3c90d514-c0ac-403e-963c-177cabddc9a1;nsid=161969045;c=1592938709654)

Hadoop完全分布式集群-slave2无法启动datanode.png

NameNode无法与box-slave2通讯:

Hadoop完全分布式集群-slave2无法启动datanode-1.png

但是box-slave2的DataNode是启动了的:

Hadoop完全分布式集群-slave2无法启动datanode-2.png

原因分析

最主要的就是在这里:

service to box-master/192.168.56.200:9000 Datanode denied communication with namenode because hostname cannot be resolved (ip=192.168.56.102, hostname=192.168.56.102)

这个意思就是NameNode无法解析我box-slave2(192.168.56.102)节点的DataNode!

但是:
DataNode都已经启动了,而且slave2的DataNode也已经启动了!
所以应该是slave2无法解析到,但是我能够ping通!
无法解析,可能应该是DNS的问题….

解决办法

解决办法1

我一开始配置了两个DNS,所以这可能就是最根本的原因!我将所有节点的DNS2都注释掉之后,就没问题了,NameNode也可以正常解析box-slave2!

DNS1=8.8.8.8
#DNS2=114.114.114.114

Hadoop完全分布式集群-slave2无法启动datanode-解决办法1.png

可以看到NameNode也正常与box-slave2节点通讯:

Hadoop完全分布式集群-slave2无法启动datanode-解决办法1-1.png

解决办法2

修改hdfs-site.xml配置:

如果解决办法1对你没用的话,就可以试一下这个!

关闭hostname检查

    <!-- 
    Add datanode ip/hostname into /etc/hosts. Or enable reverse DNS(Make sure you could get hostname via command: host ip). Or add following property in hdfs-site.xml:
    -->
    <property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>                   
        <value>false</value>
    </property>
本文目录