我正在使用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
我创build了一个名为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用户或根,他们工作正常。 但是,启动过程中调用/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 ]
解决scheme是确保sshd首先启动(虽然坦白地说,使用SSH到localhost来启动服务似乎是一个坏主意)。 您可以通过查看适当的运行级目录(例如/etc/rc.d/rc3.d )并更改S之后的数字(如S55sshd )来更改启动顺序。 确保你的关机顺序也是正确的(也就是说,确保hadoop被configuration为在 sshd 之前停止)。