記録近いHadoopの無い名前ノードが異常停止した場合

記録近い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

あなたは、クラスタを再起動することができ、終わっ〜

おすすめ

転載: www.cnblogs.com/simon-1024/p/11741469.html