kikumotoのメモ帳

インフラ・ミドル周りを中心に、興味をもったことを適当な感じで。twitter : @takakiku

ノードの追加・削除

ノードの追加・削除といった Hadoop の運用面について少し調べてみたのでメモ。

ノードの追加

ノードを追加するにはだいたい以下のような手順となる。

  • Hadoop のソフトウェアをインストールする。
    • このとき、hadoop-env.sh や conf/*.xml も設定しておく。
  • NameNode、JobTracker ノードからパスワードなしで ssh ログインできるようにしておく。
  • NameNode, JobTracker の conf/slaves に追加したノードを追記する。
  • 最後に、追加したノードで以下のコマンドを実行する。
$ cd $HADOOP_HOME
$ ./bin/hadoop-daemon.sh start datanode
$ ./bin/hadoop-daemon.sh start tasktracker

これで、Hadoop クラスタにノードが追加され、HDFS の総量域が増える。
なお、追加前のクラスタ内の各データの複製数が足りていれば、それらのデータの複製が勝手に追加したノードに複製されることはない。
ただし、新しいファイルは比較的積極的にこの追加したノードに配置されるようである。

ノードの削除

ノードの削除は、とりあえずそのノードを停止してまえばよい。複製数が設定値に満たなくなったブロックは、他のノードに自動的に複製されるので、この方法が手っ取り早い。
なお、conf/slaves から削除したノードの記述を消去しておくことも必要。

ちなみに、ノードを停止したことが NameNode や JobTracker で判断されるにはデフォルトでは10分強かかる。これを変更するには以下のように設定を変更する必要がある。

NameNode が DataNode の停止を判断するのに要する時間の変更は core-site.xml

  
    heartbeat.recheck.interval
    30000
  

という記述を追加すればよい。この場合ノードの停止後、90秒強後に NameNode はその DataNode の停止を検出する。90秒の理由は、FSNamesystem#setConfigurationParameters で

2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

となっているから。dfs.heartbeat.interval はデフォルト値 3 である。

また、JobTracker が TaskTracker の停止を判断するのに要する時間の変更は mapred-site.xml

  
    mapred.tasktracker.expiry.interval
    90000
  

という記述を追加すればよい。この場合ノードの停止後、90〜120秒後に JobTracker はその JobTracker の停止を検出する。時間の幅は、mapred.tasktracker.expiry.interval/3 の間隔で判断しているみたいだから。