社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

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 コマンド投げたからと言って、起動完了したわけではない。