在配置hadoop 0.23.8时出现以下错误“Datanode拒绝与namenode通信”

时间:2013-06-22 16:38:58

标签: hadoop hdfs dfs

我正在尝试在我的macbook上配置hadoop 0.23.8并且运行时出现以下异常

org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException: Datanode denied communication with namenode: 192.168.1.13:50010
at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:549)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:2548)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:784)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:394)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1571)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1567)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1262)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1565)

我的core-site.xml看起来像这样

<configuration>
<property>
<name>dfs.federation.nameservices</name>
<value>ns1</value>
</property>

<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>192.168.1.13:54310</value>
</property>

<property>
<name>dfs.namenode.http-address.ns1</name>
<value>192.168.1.13:50070</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>192.168.1.13:50090</value>
</property>
</configuration>

关于我可能做错的任何想法?

5 个答案:

答案 0 :(得分:32)

与2.6.0有同样的问题,shamouda的答案解决了它(我根本没有使用<property> <name>dfs.namenode.datanode.registration.ip-hostname-check</name> <value>false</value> </property> 所以这不是答案。我确实添加了

 func showMessage() {
        let alert = NSAlert()
        alert.beginSheetModalForWindow(self.view.window!, completionHandler: messageHandler)
    }

hdfs-site.xml ,这足以解决问题。

答案 1 :(得分:7)

我遇到了与Hadoop 2.6.0相同的问题,我案例的解决方案与Tariq的答案不同。

我无法在/ etc / hosts中列出IP主机映射,因为我使用DHCP动态设置IP。

问题是我的DNS不允许反向DNS查找(即查找给定IP的主机名),并且只要datanode尝试使用namenode注册,HDFS默认使用反向DNS查找。幸运的是,可以通过设置此属性来禁用此行为&#34; dfs.namenode.datanode.registration.ip-hostname-check&#34;在hdfs-site.xml中为false

如何知道您的DNS不允许反向查找? ubuntu中的答案是使用命令&#34; host&#34;。如果它可以解析主机名,则启用反向查找。如果失败,则禁用反向查找。

参考文献: 1. http://rrati.github.io/blog/2014/05/07/apache-hadoop-plus-docker-plus-fedora-running-images/ 2. https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

答案 2 :(得分:5)

看起来像我的名字解析问题。可能的原因:

Machine is listed in the file defined by dfs.hosts.exclude

dfs.hosts is used and the machine is not listed within that file

另外,请确保您拥有主机文件中列出的计算机的IP +主机名。

HTH

答案 3 :(得分:0)

我遇到了这个问题。

core-site.xml 中的早期配置是这样的。

<property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:12345</value>
</property>

稍后我使用 HOSTNAME (PC名称)修改了 localhost 名称

<property>
  <name>fs.default.name</name>
  <value>hdfs://cnu:12345</value>
</property>

它对我有用。

答案 4 :(得分:0)

仅供参考。我有同样的问题,我已经认识到,我的奴隶的主机名中有一个拼写错误。反之亦然,节点本身可能有错误的主机名。