Не удается запустить Hadoop из сценария init.d
Я использую CentOS 6.2. Я пытаюсь запустить Hadoop из сценария init.d, но он не работает. Вот что я вижу в boot.log:
Retrigger failed udev events [ OK ]
Enabling Bluetooth devices:
starting namenode, logging to /home/hadoop/hadoop/hadoop-0.20.2/bin/../logs/hadoop--namenode-localhost.localdomain.out
localhost: ssh: connect to host localhost port 22: Connection refused
localhost: ssh: connect to host localhost port 22: Connection refused
starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.20.2/bin/../logs/hadoop--jobtracker-localhost.localdomain.out
localhost: ssh: connect to host localhost port 22: Connection refused
Starting sshd: [ OK ]
Вот мой скрипт init.d:
### BEGIN INIT INFO
# Provides: hadoop
# Required-Start: sshd
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: hadoop
# Description: start hadoop daemons
### END INIT INFO
# source function library
. /etc/rc.d/init.d/functions
RETVAL=0
case "$1" in
start)
/home/hadoop/hadoop/hadoop-0.20.2/bin/start-all.sh
RETVAL=$?
;;
stop)
/home/hadoop/hadoop/hadoop-0.20.2/bin/stop-all.sh
RETVAL=$?
;;
*)
echo "Ya blew it"
RETVAL=2
esac
exit $RETVAL
когда я набираю в командной строке chkconfig --list hadoop, я получаю это:
hadoop 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Я создал пользователя с именем hadoop, и все мои вещи из hadoop живут в / home / hadoop / hadoop /. У меня установлен бит UID для всех сценариев в /home/hadoop/hadoop/hadoop-0.20.2/bin/, поэтому start-all.sh и stop-all.sh должны запускаться от имени пользователя hadoop.
Из командной строки я могу успешно выполнить start-all.sh, stop-all.sh и /init.d/hadoop. Я могу выполнять сценарии как пользователь hadoop или root, и они работают нормально. Однако, когда /init.d/hadoop вызывается во время процесса загрузки, происходит сбой.
Есть идеи, что я делаю не так?
Спасибо за помощь!
1 ответ
Ошибки кажутся довольно очевидными... кажется, что hadoop
использование скриптов запуска ssh
подключиться (возможно, как другой пользователь) и начать работу:
localhost: ssh: connect to host localhost port 22: Connection refused
И если вы посмотрите на стартап, вы увидите, что sshd
начинается после hadoop
:
starting namenode, logging to /home/hadoop/hadoop/hadoop-0.20.2/bin/../logs/hadoop--namenode-localhost.localdomain.out
starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.20.2/bin/../logs/hadoop--jobtracker-
Starting sshd: [ OK ]
Решение состоит в том, чтобы убедиться, что sshd
запускается первым (хотя откровенно использование ssh для localhost для запуска сервиса кажется плохой идеей). Вы можете изменить порядок запуска вещей, посмотрев в соответствующий каталог уровня запуска (например, /etc/rc.d/rc3.d
) и изменение номера после S
(как в S55sshd
). Убедитесь, что ваш порядок выключения тоже правильный (то есть убедитесь, что hadoop
настроен на остановку раньше sshd
).