Я использую 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, и все мои файлы с ним живут в / 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, он не работает.
Есть идеи, что я делаю не так?
Спасибо за помощь!
Ошибки кажутся довольно очевидными ... похоже, что 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 to localhost для запуска службы кажется плохой идеей). Вы можете изменить порядок запуска вещей, просмотрев каталог соответствующего уровня запуска (например, /etc/rc.d/rc3.d
) и изменение числа после S
(как в S55sshd
). Также убедитесь, что ваш порядок выключения правильный (то есть hadoop
настроен на остановку перед sshd
).