CDH4でOS再起動をすると実質的にプロセスの強制終了になる件について

英語でチケットを書く元気が今ないので、日本語でメモ。最終的には私が見つけたわけではないけど。

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とかは入れてないので見てない)

新しいサイトもよろしくお願いします!