英語でチケットを書く元気が今ないので、日本語でメモ。最終的には私が見つけたわけではないけど。
Cent6.3での話です。
今のCDH4系のinitスクリプトだと、OS再起動時や終了時にHadoop関連プロセス(NameNode, DataNode, JobTracker, TaskTracker, 2NN等)が正しく正常終了できないという・・。rebootとか叩いた日にはプロセスは正常終了しません・・。
Redhat系の場合、再起動はランレベルが6なわけで、例えばDataNodeの場合は以下のようになっています。
hadoop-hdfs-datanode 0:off 1:off 2:off 3:on 4:on 5:on 6:off
/etc/rc.d/rc を見ると以下となっています。
# First, run the KILL scripts. for i in /etc/rc$runlevel.d/K* ; do # Check if the subsystem is already up. subsys=${i#/etc/rc$runlevel.d/K??} [ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] || continue check_runlevel "$i" || continue # Bring the subsystem down. [ -n "$UPSTART" ] && initctl emit --quiet stopping JOB=$subsys $i stop [ -n "$UPSTART" ] && initctl emit --quiet stopped JOB=$subsys done
/var/lock/subsys/hadoop-hdfs-datanode というロックファイルが作られていれば、OS停止時にプロセスの停止をしてくれます。(shutdown や reboot した時にズラーーーッと緑の文字で OK OK OKって出てきますね)
DataNodeの場合は、chkconfig --add した時に以下のファイルが作られます。
/etc/rc.d/init.d/hadoop-hdfs-datanode /etc/rc.d/rc0.d/K15hadoop-hdfs-datanode /etc/rc.d/rc1.d/K15hadoop-hdfs-datanode /etc/rc.d/rc2.d/K15hadoop-hdfs-datanode /etc/rc.d/rc3.d/S85hadoop-hdfs-datanode /etc/rc.d/rc4.d/S85hadoop-hdfs-datanode /etc/rc.d/rc5.d/S85hadoop-hdfs-datanode /etc/rc.d/rc6.d/K15hadoop-hdfs-datanode
これは /etc/rc.d/init.d/hadoop-hdfs-datanode のコメントに、以下の記述があるからです。
# Starts a Hadoop datanode # # chkconfig: 345 85 15 # description: Hadoop datanode # ### BEGIN INIT INFO # Provides: hadoop-hdfs-datanode # Short-Description: Hadoop datanode # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # Required-Start: $syslog $remote_fs # Required-Stop: $syslog $remote_fs # Should-Start: # Should-Stop: ### END INIT INFO
こーいうコメントを拾って設定しているなんて知りませんでした・・。
datanodeのinitスクリプト、肝心のLOCKファイルは・・
LOCKDIR="/var/lock/subsys" LOCKFILE="$LOCKDIR/hadoop-datanode" .... [ $RETVAL -eq $RETVAL_SUCCESS ] && touch $LOCKFILE
う、うん・・。ファイル名が違うね。これは hadoop-hdfs-datanode じゃないとダメだよね・・。直したらOS停止時にもきちんとSTOP処理が呼ばれるようになりました。
CDH4のプロセス全部に当てはまるので、注意が必要です。(ただし、HBaseとかは入れてないので見てない)