问题描述:在CM上添加一台Dataode主机后,启动datanode时,一直报下面的错误:
“ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool BP-1251007601-10.162.3.171-1464682677169 (Datanode Uuid 88ab81cd-ddb8-4ca4-8652-b631937aacec) service to DSJ-RTB-4T-202/10.162.3.172:8022 Datanode denied communication with namenode because the host is not in the include-list: DatanodeRegistration(10.162.2.225, datanodeUuid=88ab8
1cd-ddb8-4ca4-8652-b631937aacec, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-56;cid=cluster16;nsid=565627482;c=0)”
并且CM页面上“最新命令”显示active namenode与standby namenode“刷新节点列表”失败,报超时错误。
问题原因:造成此问题的原因大部分是由于主机IP方面有问题。报错上面提示的是与active namenode拒绝连接。
问题解决办法有:
方法一:检查namenode节点的/etc/hosts配置,看是否有新添加的datanode信息(其实所有机器都应该添加这台IP)
方法二:CM - HDFS -> Namenode instance -> Actions => Refresh node list //这个可能执行不成功,因为尝试从CM上刷新节点列表, 但是报timeout,所以CM和Namenode之间的通讯可能有些问题。
方法三:在namenode主机上进行手动刷新
hdfs dfsadmin -fs hdfs://DSJ-RTB-4T-201:8020 –refreshNodes //其中的DSJ-RTB-4T-201为standby namenode的IP,如果有报错active namenode,那就在active namenode上进行手动刷新。最终使用这个方法能成功刷新,并且添加的新datanode也能正常启动了。
关于使用方法三的过程:
由于报错上面提示的是与active namenode拒绝连接,所以手动在namenode节点上刷新主机列表:
hadoop dfsadmin -fs hdfs://10.162.3.172:8020 -refreshNodes //其中10.162.3.172是active namenode的IP
此时在active namenode也是能看到新添加的机器的:
/opt/cm-5.5.4/run/cloudera-scm-agent/process/135920-hdfs-NAMENODE-refresh目录下去执行如下:
cat dfs_hosts_allow.txt | grep 10.162.2.223
可以看出是有新加的节点的。
然后再次重启datanode,发现datanode还是报以前一样的错误,只不过里面报的是与standby namenode节点拒绝连接,这次还是手动在standby namenode上刷新主机列表:
hadoop dfsadmin -fs hdfs://10.162.3.171:8020 -refreshNodes //其中10.162.3.171是active namenode的IP
最后重启datanode,发现终于不报错,也能正常使用了。
cloudera建议重启cm agent的命令顺序为:
/opt/cm-5.5.4/etc/init.d/cloudera-scm-agent next_stop_hard
/opt/cm-5.5.4/etc/init.d/cloudera-scm-agent stop
/opt/cm-5.5.4/etc/init.d/cloudera-scm-agent start