hadoop namenode スタート直後は hdfs コマンドが動かない ?
Hadoop の構築スクリプトを作っています。
namenode を起動した後に、必要なディレクトリ hdfs 上に作成するため、以下のようにスクリプトを記述。
/usr/hdp/2.6.2.0-205/hadoop/sbin/hadoop-daemon.sh start namenode hdfs dfs -mkdir -p /user/my_data
ところが、mkdir コマンドの実行中にエラーが発生。
mkdir: Call From hdp-rm1001.docker/172.20.0.2 to hdp-rm1001.docker:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
ConnectionRefused ? ということでしたが、同ホスト内での通信なので、ネットワークの問題ではなさそう。
ただ、この 9000 番ポートが LISTEN 状態にはなっていなかった。
少し、待ってから手動で mkdir のコマンドを試してみると、動いた!
試しに namenode 起動した後、60 秒 sleep させてみると。
/usr/hdp/2.6.2.0-205/hadoop/sbin/hadoop-daemon.sh start namenode sleep 60 hdfs dfs -mkdir -p /user/my_data
エラー発生しない!
ということは、namenode 起動直後は hdfs とコミュニケーションを取る準備がまだ出来ていないということでしょうか。
このタイミングにおいては、9000 番ポートが LISTEN 状態になっていました。
一応、datanode については、既に起動してあったので、恐らく namenode の起動タイミングによる問題と想定。
ちなみに sleep 時間を 10 秒に短縮すると、ダメでした。
そして namenode の起動ログを見てみると、実は1分くらい起動に要している!
2018-07-09 12:35:11,995 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: STARTUP_MSG: 2018-07-09 12:36:02,526 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: NameNode RPC up at: hdp-rm1001.docker/172.20.0.2:9000
namenode start 投げてから、1分以内に hdfs コマンド投げる必要はないので、困ることはないかと。
ただ、自分は ConnectionRefused というメッセージに踊らされ、しばらく混乱してしまいました。。
反省点
start コマンド投げたからと言って、起動完了したわけではない。