Hadoop設定ファイルの同期

完全分散モードでstart-dfs.shの実行時に下記のエラーが出て困っていたのだけれど、ようやく解決できた。

Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.

原因はデータノードがネームノードのホスト名とポートを知らないことだった。
これは私の「Hadoopの設定ファイルはネームノードが勝手にデータノードに配布してくれる」という勘違いがあって、データノードの設定ファイルを初期状態のままにしていたために起こっていたことだった。


Hadoopはデフォルトでは設定ファイルの同期は行わない。
hadoop-env.shに、下記のようにマスターノードのホスト名とHadoopのインストールディレクトリの設定を追加すればrsyncによる同期を行ってくれるようになる。

export HADOOP_MASTER=master:/usr/local/hadoop

この設定はマスターノードおよびデータノードの両方で行う必要がある。
マスターノードでも行う必要があるのは、hadoop-env.shも同期の対象だからだ。


rsyncはデータノードが実行するため、データノードからマスターノードにパスワード入力なしでログインできるように設定しておく必要がある。