すべての地雷を踏む男leonです。
Hadoopカスタマイズをネタにブログを始めさせていただきました。
前回、Hadoopセットアップ手順を紹介させていただいたので、今回からカスタマイズ話をしたいと思います。
Hadoopカスタマイズをネタにブログを始めさせていただきました。
前回、Hadoopセットアップ手順を紹介させていただいたので、今回からカスタマイズ話をしたいと思います。
Hadoopのincludeファイル、excludeファイルにハマった・・・。
今日はそのお話をさせていただきます。
今日はそのお話をさせていただきます。
話を始める前にincludeファイル、excludeファイルとはなんですかを説明しないとですね。
このincludeファイルとexcludeファイルはサーバーのslave接続を終了させる際に、ノードからデータを退避して脱退させる為に使用します。
includeファイルはデータノードへの接続を許可されるデータノード、JobTrackerに接続可能なTaskTrackerのホスト名を記述するファイルです。includeファイルはdfs.hostsプロパティとmapred.hostsプロパティで指定します。
excludeファイルはデータノードへの接続を許可しないデータノード、JobTrackerに接続させないTaskTrackerのホスト名を記述するファイルです。excludeファイルはdst.hosts.excludeプロパティとmapred.hosts.excludeプロパティでシステムで指定します。
このincludeファイルとexcludeファイルはサーバーのslave接続を終了させる際に、ノードからデータを退避して脱退させる為に使用します。
includeファイルはデータノードへの接続を許可されるデータノード、JobTrackerに接続可能なTaskTrackerのホスト名を記述するファイルです。includeファイルはdfs.hostsプロパティとmapred.hostsプロパティで指定します。
excludeファイルはデータノードへの接続を許可しないデータノード、JobTrackerに接続させないTaskTrackerのホスト名を記述するファイルです。excludeファイルはdst.hosts.excludeプロパティとmapred.hosts.excludeプロパティでシステムで指定します。
includeファイルとexcludeファイルを指定した場合のノード接続のルールは以下の通りです。
includeファイル | excludeファイル | 扱い |
---|---|---|
含まれていない | 含まれていない | ノードへ接続不可 |
含まれていない | 含まれている | ノードへ接続不可 |
含まれている | 含まれていない | ノードへ接続可 |
含まれている | 含まれている | ノードは接続可で、脱退させられる |
JobTracker接続へのルールは以下の通りです。
includeファイル | excludeファイル | 扱い |
---|---|---|
含まれていない | 含まれていない | Trackerへ接続不可 |
含まれていない | 含まれている | Trackerへ接続不可 |
含まれている | 含まれていない | Trackerへ接続可 |
含まれている | 含まれている | Trackerへ接続不可 |
Hadoopにはmastersファイル、slavesファイルという設定ファイルがあり、slavesファイルとincludeファイルには同じような内容となりますが役割が異なります。
slavesファイルは、Hadoopのデーモン起動終了といったオペレーションの制御スクリプトで参照されます。
includeファイルは、Hadoopデーモンがノード接続、Tracker接続の許可不許可を確認するために参照しています。
slavesファイルは、Hadoopのデーモン起動終了といったオペレーションの制御スクリプトで参照されます。
includeファイルは、Hadoopデーモンがノード接続、Tracker接続の許可不許可を確認するために参照しています。
ここまで偉そうに説明しましたが、includeファイル、excludeファイルのことは最近まで知らずデータの退避はできないと思っていました。
というのは、Hadoopにslave接続させるサーバーを増やしていく過程ではexcludeファイルはもちろん、includeファイルも必要なかったのです。
というのも、dfs.hostsプロパティ、mapred.hostsプロパティでincludeファイルを明示的に指定していなければ、ノード、Trackerへの接続はデフォルト許可だったんです。
うぅ~ん、まぁ、いい訳ですね。
というのは、Hadoopにslave接続させるサーバーを増やしていく過程ではexcludeファイルはもちろん、includeファイルも必要なかったのです。
というのも、dfs.hostsプロパティ、mapred.hostsプロパティでincludeファイルを明示的に指定していなければ、ノード、Trackerへの接続はデフォルト許可だったんです。
うぅ~ん、まぁ、いい訳ですね。
さてさて、では、includeファイル/excludeファイルを指定してslavesサーバーを正しく脱退させる手順をご紹介していくことにします。
サーバー追加手順
- includeファイルに追加するslaveサーバーのホスト名を追記し、Hadoopサーバー全台に設定を同期します。
$ echo "hdslave3.domain" >> /home/hadoop/hadoop/conf/hosts.include $ /home/hadoop/rsync.sh
※includeファイルにはサーバーのFQDNを記述します。
※rsync.shは前回のHadoopセットアップ手順を参照してください。
- hadoopコマンドでネームノードを更新します。
$ /home/hadoop/hadoop/bin/hadoop dfsadmin -refreshNodes
- slavesファイルに追加するslaveサーバーのホスト名を追記し、設定を同期します。
$ echo "hdslave3" >> /home/hadoop/hadoop/conf/slaves $ /home/hadoop/rsync.sh
- Hadoopシステムを再起動します。
$ /home/hadoop/hadoop/bin/stop-all.sh $ /home/hadoop/hadoop/bin/start-all.sh
サーバー脱退手順
- excludeファイルにslave接続から脱退させるサーバーのホスト名を追記し、設定を同期します。
$ echo "hdslave3.domain" >> /home/hadoop/hadoop/conf/hosts.exclude $ /home/hadoop/rsync.sh
- HadoopシステムのMapReduceクラスタを再起動します。
$ /home/hadoop/hadoop/bin/stop-mapred.sh $ /home/hadoop/hadoop/bin/start-mapred.sh
- hadoopコマンドでネームノードを更新します。
$ /home/hadoop/hadoop/bin/hadoop dfsadmin -refreshNodes
- 脱退中のデータノードからデータが退避されるのをひたすら(弊社の規模では1?2日)待ちます。
データが退避できたかどうかは、以下のコマンドで確認します。
$ hadoop/home/hadoop/bin/hadoop dfsadmin -refreshNodes
StateがDecommission in progress から Decommissionedへ変更したらデータ退避完了です。
- includeファイル、excludeファイル、slavesファイルから脱退させるサーバーのホスト名を削除し、設定を同期します。
$ grep -v "hdslave3" /home/hadoop/hadoop/conf/hosts.include >> /home/hadoop/hadoop/conf/hosts.include $ grep -v "hdslave3" /home/hadoop/hadoop/conf/hosts.exclude >> /home/hadoop/hadoop/conf/hosts.exclude $ grep -v "hdslave3" /home/hadoop/hadoop/conf/slaves >> /home/hadoop/hadoop/conf/slaves $ /home/hadoop/rsync.sh
- Hadoopシステムを再起動します。
$ /home/hadoop/hadoop/bin/stop-all.sh $ /home/hadoop/hadoop/bin/start-all.sh
- hadoopコマンドでネームノードを更新します。
$ /home/hadoop/hadoop/bin/hadoop dfsadmin -refreshNodes
なんと、手順説明までで時間切れになってしまいました。
ハマったお話は次回とさせていただきます。
ではでは
ハマったお話は次回とさせていただきます。
ではでは