这是来自hadoop-datanode -... log:
的日志FATAL org.apache.hadoop.hdfs.server.datanode.DataNode:块池块池的初始化失败BP-1421227885-192.168.2.14-1371135284949(存储ID DS-30209445-192.168.2.41-50010- 1371109358645)服务到/192.168.2.8:8020 org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException):Datanode拒绝与namenode通信:DatanodeRegistration(0.0.0.0,storageID = DS-30209445-192.168.2.41-50010-1371109358645 ,infoPort = 50075,ipcPort = 50020,storageInfo = lv = -40; cid = CID-f16e4a3e-4776-4893-9f43-b04d8dc651c9; nsid = 1710848135; c = 0) at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:648) 在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:3498)
我的错误:namenode可以启动,datanode无法启动
答案 0 :(得分:9)
我也曾经看过这个,namenode服务器需要做一个反向查找请求, 所以一个nslookup 192.168.2.41应该返回一个名字,它不会这样记录0.0.0.0
如果你的dns正常工作(即in-addr.arpa文件与域文件中的条目匹配),你不需要将地址硬编码到/ etc / hosts中但是如果你没有dns那么你需要帮助hadoop。
答案 1 :(得分:1)
似乎存在名称解析问题。
Datanode拒绝与namenode通信: DatanodeRegistration(0.0.0.0, storageID = DS-30209445-192.168.2.41-50010-1371109358645, infoPort = 50075,ipcPort = 50020,
此处DataNode将自己标识为0.0.0.0
。
看起来像dfs.hosts强制执行。你能否在你的NameNode的hdfs-site.xml配置中重新检查你肯定没有使用dfs.hosts文件?
如果尝试连接到namenode的datanode列在dfs.hosts.exclude定义的文件中,或者使用了dfs.hosts且该文件中未列出datanode,则可能会出现此错误。确保datludeode未在排除中列出,如果您使用的是dfs.hosts,请将其添加到includes。之后重新启动hadoop并运行hadoop dfsadmin -refreshNodes.
HTH
答案 2 :(得分:0)
当datanode尝试使用namenode注册时,需要反向DNS查找。我在Hadoop 2.6.0中得到了相同的例外,因为我的DNS不允许反向查找。
但您可以通过在hdfs-site.xml中将此配置“dfs.namenode.datanode.registration.ip-hostname-check”设置为false来禁用Hadoop的反向查找
我从here得到了这个解决方案,它解决了我的问题。