Подтвердить что ты не робот

Получение следующей ошибки: "Datanode запретил общение с namenode" при настройке hadoop 0.23.8

Я пытаюсь настроить hasoop 0.23.8 на моем macbook и выполняю работу в следующем исключении

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>

Любые идеи о том, что я могу делать неправильно?

4b9b3361

Ответ 1

Похоже на вопрос разрешения имен для меня. Возможные причины:

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 + имя хоста компьютера, указанного в вашем файле hosts.

НТН

Ответ 2

Имела ту же проблему с 2.6.0, и ответ shamouda разрешил ее (я вообще не использовал dfs.hosts, так что не мог быть ответом. Я добавил

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

до hdfs-site.xml, и этого было достаточно, чтобы исправить эту проблему.

Ответ 3

У меня такая же проблема с Hadoop 2.6.0, и решение для моего дела было иным, чем ответ Tariq.

Я не мог отображать сопоставление IP-хоста в /etc/hosts, потому что я использую DHCP для динамического установления IP-адресов.

Проблема заключалась в том, что мой DNS не разрешает поиск в обратном DNS (т.е. просматривает имя хоста с учетом IP-адреса), а HDFS по умолчанию использует обратный поиск DNS, когда какой-либо datanode пытается зарегистрироваться с помощью namenode. К счастью, это поведение можно отключить, установив это свойство "dfs.namenode.datanode.registration.ip-hostname-check" на false в hdfs-site.xml

Как узнать, что ваш 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

Ответ 4

У меня возникла эта проблема.

более ранняя конфигурация в core-site.xml выглядит следующим образом.

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

Позже я изменил имя localhost с помощью HOSTNAME (имя компьютера)

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

Это сработало для меня.

Ответ 5

Просто для информации. У меня была та же проблема, и я узнал, что в имени хоста моих подчиненных была опечатка. И наоборот, сам node может иметь неправильное имя хоста.