ノードの追加・削除
ノードの追加・削除といった Hadoop の運用面について少し調べてみたのでメモ。
ノードの追加
ノードを追加するにはだいたい以下のような手順となる。
- Hadoop のソフトウェアをインストールする。
- 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 の間隔で判断しているみたいだから。