16

我正在尝试在我的 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>

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

4

5 回答 5

32

与 2.6.0 有同样的问题,shamouda 的回答解决了它(我根本没有使用dfs.hosts,所以这不可能是答案。我确实添加了

<property>
  <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
  <value>false</value>
</property>

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

于 2015-04-28T11:28:04.660 回答
7

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

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

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

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

参考资料: 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

于 2015-04-13T04:52:10.280 回答
6

对我来说似乎是名称解析问题。可能的原因:

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+主机名。

高温高压

于 2013-06-22T17:17:36.187 回答
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>

它对我有用。

于 2013-11-27T17:55:15.727 回答
0

仅供参考。我遇到了同样的问题,并且我已经认识到,我的奴隶的主机名中有错字。反之亦然,节点本身可能具有错误的主机名。

于 2014-02-03T10:15:31.757 回答