Невозможно запустить диспетчер узлов на главном
Я настраиваю кластер 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