Невозможно запустить диспетчер узлов на главном

Я настраиваю кластер Hadoop YARN, и я использую машину в качестве главного и подчиненного. Когда я запускаю YARN с помощью следующей команды, он запускает менеджер узлов на ведомых, но не на главном узле.

sbin/yarn-daemons.sh start nodemanager

У меня есть мастер, который также является подчиненным, а затем у меня есть еще два подчиненных в кластере, управляющие узлами в подчиненных устройствах запускаются правильно.

Ошибка, которую я получаю:

org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [0.0.0.0:8040] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException

Вывод некоторых команд.

cat /etc/services | grep 8040
ampify          8040/tcp                # Ampify Messaging Protocol
ampify          8040/udp                # Ampify Messaging Protocol

lsof -i tcp:8040
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    28021   df  195u  IPv6 3580602      0t0  TCP server1.mydomain.com:ampify (LISTEN

2 ответа

Решение

В конфигурации по умолчанию, поставляемой Hadoop, порт 8040 является портом, который NodeManager использует для локализатора. По сути, это конечная точка сервера, отвечающая за доставку файлов, необходимых для запуска контейнера, на локальный узел. (Например, это может быть файл jar задания MapReduce или файлы распределенного кэша.)

Предполагая, что на машине есть другой сервер (здесь обозначен как Ampify), законно связанный с портом 8040, и вы не хотите останавливать эту службу, тогда можно перенастроить порт, используемый NodeManager для локализатора. Установить свойство yarn.nodemanager.localizer.address в вашем файле yarn-site.xml. Это задокументировано здесь:

http://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

Извлечение этого из источника XML в дереве Hadoop, вот документация для свойства:

<property>
  <description>Address where the localizer IPC is.</description>
  <name>yarn.nodemanager.localizer.address</name>
  <value>${yarn.nodemanager.hostname}:8040</value>
</property>

Выше ошибка означает, что вы пытаетесь запустить процесс на 8040, который уже занят другим экземпляром.

Чтобы избавиться от этой ошибки, вам нужно завершить процесс, который в данный момент прослушивает порт 8040. В выводе lsof говорится, что pid равен 28021. Завершите процесс, используя следующую команду, и начните заново.

kill -9 28021
Другие вопросы по тегам