web-dev-qa-db-ja.com

hadoop 0.23.8の構成中に、「Datanodeがnamenodeとの通信を拒否しました」というエラーが発生する

MacBookでHadoop0.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>

私が間違っているかもしれないことについて何か考えはありますか?

16
anonymous123

私には名前解決の問題のように見えます。考えられる理由:

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

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

また、hostsファイルにマシンのIP +ホスト名がリストされていることを確認してください。

HTH

6
Tariq

2.6.0でも同じ問題があり、shamoudaの答えで解決しました(dfs.hostsをまったく使用していなかったため、答えにはなりませんでした。追加しました

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

to hdfs-site.xmlこれで問題を解決できました。

32

Hadoop 2.6.0でも同じ問題が発生しましたが、私の場合の解決策はTariqの回答とは異なりました。

DHCPを使用してIPを動的に設定しているため、/ etc/hostsにIP-Hostマッピングをリストできませんでした。

問題は、私のDNSが逆DNSルックアップ(つまり、IPを指定してホスト名を検索する)を許可せず、HDFSがデフォルトで逆DNSルックアップを使用することでしたデータノードはネームノードに登録しようとします。幸い、この動作は、hdfs-site.xmlでこのプロパティ「dfs.namenode.datanode.registration.ip-hostname-check」をfalseに設定することで無効にできます。

DNSが逆引き参照を許可していないことを知る方法は? ubuntuでの答えは、コマンド「ホスト」を使用することです。ホスト名を解決できる場合は、逆引き参照が有効になります。失敗した場合、逆引き参照は無効になります。

参照: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

7
shamouda

私はこの問題を抱えています。

core-site.xmlの以前の構成は次のようになります。

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

後でlocalhostの名前を[〜#〜] hostname [〜#〜](PC名)で変更しました

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

それは私のために働いた。

0
Cnu Federer

情報のためだけに。私は同じ問題を抱えており、スレーブのホスト名にタイプミスがあったことを認識しました。逆に、ノード自体のホスト名が間違っている可能性があります。

0
mstrewe