Удаленный доступ к namenode не разрешен, несмотря на то, что сервисы уже запущены. - PullRequest
4 голосов
/ 01 января 2012

Я успешно установил и запустил Hadoop на одной машине с IP-адресом 192.168.1.109 (на самом деле это фактически экземпляр Ubuntu, работающий в виртуальной коробке). При наборе jps отображается

2473 DataNode

2765 TaskTracker

3373 Jps

2361 NameNode

2588 SecondaryNameNode

2655 JobTracker

Это должно означать, что hadoop запущен и работает. Выполнение таких команд, как ./hadoop fs -ls, в порядке и дает ожидаемый результат.

Но если я попытаюсь подключить его из окна Windows с IP-адресом 192.168.1.80, написав API-интерфейс HDFS Java-кода для его подключения следующим образом:

Конфигурация conf = новая конфигурация ();

FileSystem hdfs = null;

Путь filenamePath = новый путь (FILE_NAME);

hdfs = FileSystem.get (conf); <- проблема возникла в этой строке </p>

когда я запускаю код, ошибка отображается следующим образом:

11/12/07 20:37:24 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовали 0 раз (а).

11/12/07 20:37:26 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовал 1 раз.

11/12/07 20:37:28 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовал 2 раз.

11/12/07 20:37:30 INFO ipc.Client: Повторное подключение к серверу: /192.168.1.109:9000. Уже пробовал 3 раз.

11/12/07 20:37:32 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовал 4 раз.

11/12/07 20:37:33 INFO ipc.Client: Повторное подключение к серверу: /192.168.1.109:9000. Уже пробовал 5 раз.

11/12/07 20:37:35 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовали 6 раз.

11/12/07 20:37:37 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовали 7 раз.

11/12/07 20:37:39 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовали 8 раз.

11/12/07 20:37:41 INFO ipc.Client: Повторная попытка подключения к серверу: /192.168.1.109:9000. Уже пробовали 9 раз.

java.net.ConnectException: вызов /192.168.1.109:9000 завершился неудачно при исключении соединения: java.net.ConnectException: соединение отклонено: нет дополнительной информации

Чтобы убедиться, что сокет уже открыт и ожидает входящих подключений на сервере hadoop, я netstat на окне ubuntu Результат показывает следующее:

tcp 0 0 localhost: 51201 : LISTEN 2765 / java
tcp 0 0 *: 50020 : СЛУШАТЬ 2473 / Java
tcp 0 0 localhost: 9000 : LISTEN 2361 / java
tcp 0 0 localhost: 9001 : LISTEN 2655 / java
tcp 0 0 *: mysql : LISTEN -
tcp 0 0 *: 50090 : LISTEN 2588 / java
tcp 0 0 *: 11211 : СЛУШАТЬ -
tcp 0 0 *: 40843 : СЛУШАТЬ 2473 / Java
tcp 0 0 *: 58699 : СЛУШАТЬ -
tcp 0 0 *: 50060 : LISTEN 2765 / java
tcp 0 0 *: 50030 : LISTEN 2655 / java
tcp 0 0 *: 53966 : LISTEN 2655 / java
tcp 0 0 *: www : LISTEN -
tcp 0 0 *: epmd : LISTEN -
tcp 0 0 *: 55826 : LISTEN 2588 / java
tcp 0 0 *: ftp : LISTEN -
tcp 0 0 *: 50070 : LISTEN 2361 / java
tcp 0 0 *: 52822 : LISTEN 2361 / java
tcp 0 0 *: ssh : LISTEN -
tcp 0 0 *: 55672 : LISTEN -
tcp 0 0 *: 50010 : LISTEN 2473 / java
tcp 0 0 *: 50075 : LISTEN 2473 / java

Я заметил, что если столбец локального адреса похож на localhost: 9000 (начинается с localhost: not * :) Он не сможет быть подключен с удаленного хоста или даже в своем собственном окне в некоторых случаях.Я попытался telnet localhost 9000, он работает, я имею в виду, что он может подключиться к порту, но если я использую telnet 192.168.1.109 9000, ошибки отображаются как

$ telnet 192.168.1.109 9000 Trying 192.168.1.109 ..telnet: невозможно подключиться к удаленному хосту: соединение отклонено

Я потратил почти неделю на выяснение проблемы, которую я действительно исчерпал, и я надеюсь, что кто-то может мне помочь.

Примечание: я не уверен, что по умолчанию наменоде отказывается от удаленного подключения.Нужно ли менять некоторые настройки, чтобы разрешить удаленные подключения?

Ответы [ 4 ]

8 голосов
/ 01 января 2012

Измените значение fs.default.name на hdfs://106.77.211.187:9000 с hdfs://localhost:9000 в core-site.xml для клиента и NameNode.Замените IP-адрес IP-адресом узла, на котором работает NameNode, или именем хоста.

Смог telnet 106.77.211.187 9000, и здесь выводится netstat -a | grep 9000

tcp6 0 0 106.77.211.187:9000 [::]: * LISTEN
tcp6 0 0 106.77.211.187:50753 106.77.211.187% 819: 9000 УСТАНОВЛЕНО
tcp6 0 0 106.77.211.187:9000 106.77.211.187% 81: 50753 УСТАНОВЛЕНО

Почему исходный код выглядит следующим образом для fs.default.name, для которого установлено значение localhost

ServerSocket socket = new ServerSocket (9000);
socket.bind (localhost);

Поскольку адрес привязки назначен localhost, процесс namenode может принимать соединение только с localhost.Если для имени компьютера или IP-адреса назначен адрес связывания, процесс namenode может принять любое соединение с удаленного компьютера.

3 голосов
/ 05 ноября 2012

Я заменил весь localhost на его IP-адрес во всех файлах конфигурации, теперь он работает нормально.

0 голосов
/ 25 апреля 2019

Я столкнулся с той же проблемой, но смог исправить ее, выполнив следующие действия.В качестве виртуальных машин CentOS7 VirtualBox у меня были ведущий и ведомые устройства hadoop, и я не мог получить доступ к веб-интерфейсам с хоста Windows, используя IP-адрес и порт главного узла.Убедитесь, что вы выполнили шаги, описанные ниже, чтобы исправить это;

  1. Как упоминалось в других постах, убедитесь, что файл / etc / hosts правильно заполнен
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.10.2.20     hdp-master1.hadoop.cluster      hdp-master1

172.10.2.21     hdp-slave1.hadoop.cluster       hdp-slave1

172.10.2.22     hdp-slave2.hadoop.cluster       hdp-slave2

И во всех ваших XML-файлах hadoop используйте полное имя хоста или ip вместо localhost, как уже упоминали другие

Добавьте следующую запись в hdfs-site.xml , чтобы заставить порт веб-интерфейса работать с ip вместо 0.0.0.0:9870

<property>
        <name>dfs.namenode.http-address</name>
        <value>hdp-master1.hadoop.cluster:9870</value>
</property>
Добавьте следующую запись в yarn-site.xml , чтобы заставить порт веб-интерфейса менеджера ресурсов запускаться из ip вместо 0.0.0.0:8088
<property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hdp-master1.hadoop.cluster:8088</value>
</property>

<property>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>hdp-master1.hadoop.cluster:8090</value>
</property>

Остановите и запустите все службы, используя start-all.sh.На всякий случай я сначала запустил hdfs namenode -format перед перезапуском служб

Используйте netstat -tulnp на главном узле и убедитесь, что веб-порты работают на основе ip

netstat -tulnp

tcp 0 0 172.16.3.20:8088 0.0.0.0:* LISTEN 14651/java
tcp 0 0 172.16.3.20:9870 0.0.0.0:* LISTEN 14167/java

Даже после всего этого я все еще не мог получить доступ с хоста Windows, и виновником был брандмауэр на узлах hadoop.Поэтому остановите остановку брандмауэра на всех главных и подчиненных узлах, как показано ниже:

Check status
------------
systemctl status firewalld

Stop Firewall
-------------
systemctl stop firewalld

Disable from Startup
--------------------
systemclt disable firewalld

Теперь вы сможете получить доступ с хоста Windows через веб-браузер.У меня есть записи, добавленные в файл хостов Windows, поэтому даже следующее работает

http://hdp-master1.hadoop.cluster:9870
http://hdp-master1.hadoop.cluster:8088

Надеюсь, это поможет

0 голосов
/ 17 января 2018

Проверьте файл /etc/hosts и убедитесь, что у вас есть IP-адрес, связанный с полным именем вашего узла (FQN). Пример:

127.0.0.1      localhost localhost.localdomain localhost4 localhost4.localdomain4
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.11 node1.mydomain.com node1
192.168.100.12 node2.mydomain.com node2 

В моем случае у меня была строка 127.0.0.1 node1.mydomain.com, которая была явно неправильной.

...