Назад | Перейти на главную страницу

Не удается запустить 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, и все мои файлы с ним живут в / 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).