Linux

無法從 init.d 腳本啟動 Hadoop

  • August 16, 2012

我正在使用 CentOS 6.2。我正在嘗試從 init.d 腳本啟動 Hadoop,但它失敗了。這是我在 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/ 中。我在 /home/hadoop/hadoop/hadoop-0.20.2/bin/ 中的所有腳本上都設置了 UID 位,因此 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 到 localhost 來啟動服務似乎是個壞主意)。/etc/rc.d/rc3.d您可以通過查看適當的執行級別目錄(例如)並更改後面的數字S(如 )來更改事物的啟動順序S55sshd。確保您的關閉順序也正確(即,確保hadoop配置為在之前 sshd停止)。

引用自:https://serverfault.com/questions/417997