記録近いHadoopの無い名前ノードが異常停止した場合
独自の仮想マシン環境のHadoopクラスタ上で実行しました直接仮想マシンを中断されていない場合は、正常に実行されている、あなたは今日、いくつかの調整をする必要がありますが、突然、クラスタが正常に閉じることができないことがわかりました。その後、Baiduの大法〜に頼っ:
我々はすべて知っているように、クラスタコマンドをシャットダウンstop-dfs.sh
し、stop-yarn.sh
その後、私はガチョウが、特定の状況がこれです実行し終えました。
[simon@master ~]# stop-dfs.sh
Stopping namenodes on [master]
master: no namenode to stop
slave2: no datanode to stop
slave1: no datanode to stop
...
ああああああ...これは、いくつかは...私にはわからないものです...
これは、正常に起動しますが停止することはできませんか?私をkiding?
実行jps
するコマンドを、名前ノード、データノードと他のプロセスが正常に実行されてました。満足して、退屈!
最終参照大物のブログの後、hadoop-daemon.shスクリプトファイルの読み込みを開始し、問題の問題の原因を見つけます。
1が最初に決定され、誤り位置コードが表示されます。
if [ -f $pid ]; then
TARGET_PID=`cat $pid`
if kill -0 $TARGET_PID > /dev/null 2>&1; then
echo stopping $command
kill $TARGET_PID
sleep $HADOOP_STOP_TIMEOUT
if kill -0 $TARGET_PID > /dev/null 2>&1; then
echo "$command did not stop gracefully after $HADOOP_STOP_TIMEOUT seconds: killing with kill -9"
kill -9 $TARGET_PID
fi
else
echo no $command to stop
fi
rm -f $pid
else
echo no $command to stop
fi
はい、エラーが数行のコードの後ろにあります
....省略
else
echo no $command to stop
fi
今明白な理由のために、無pidファイル場合は、クラスタを停止する時間に誤差の外に報告されます。だから、pidファイルそれは何ですか?なぜそれを見つけることができませんか?
図2に示すように、情報へのアクセスを介して、そのスクリプト内のコードのような行
#第107行
pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
ここでは見ることができ、
HADOOP_PID_DIR
変数は、PIDファイルのHadoopのディレクトリを指定します。そして、pidファイルはシェーンです。あなたはHadoopの起動時には、PID番号を処理する際のプロセスをシャットダウンするプロセスPIDに従うことができ、停止-DFSスクリプトの実装ので、ファイルに保存されます。
検索
HADOOP_PID_DIR
デフォルトのパスを:if [ "$HADOOP_PID_DIR" = "" ]; then #97~99行 HADOOP_PID_DIR=/tmp fi
[OK]を、理解し、PIDファイルの格納ディレクトリのクラスタは、システムのある
/tmp
ディレクトリ、およびこのディレクトリ内のファイルシステムは、定期的に清掃されます。このクラスタは、PIDファイルが長いクリアされた、実行されているので、私が築き上げ。だから我々はあなたがあなた自身を定義することができ、それを別の指定されたディレクトリを与えます。私はそれを設定します/home/tmp/pid
。
続行するために設定します。3.
以来stop
コマンドは使用できません、我々は唯一の手動で閉じることができ、その後、jps
あなたのPIDの名前ノードの\のデータノードと他のプロセスを参照して、殺す-9殺すために。
if [ "$HADOOP_PID_DIR" = "" ]; then #97~99行
HADOOP_PID_DIR=/home/tmp/pid # 创建这个文件夹用于存放pid文件
fi
あなたは、クラスタを再起動することができ、終わっ〜