secondaryNamenode構成とnameNode障害復旧


*注:ここでは0.20.2構成テストに基づき、0.21以降はCheckpoint NodeとBackup Nodeに変更されました
一、構成
1.マスターファイルにSecondaryノードのホスト名を追加します.
*注意:mastersファイルはnamenodeではなくsecondaryのホストを指定し、slavesはdatanodeとtasktrackerを指定します.
namenodeはcore-site.xml fs.default.name指定jobtrackerはmapred-site.xml mapred.job.tracker指定
2.hdfs-siteを修正する.xmlファイル
<property>
    <name>dfs.http.address</name>
    <value>${your-namenode}:50070</value>
    <description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
<property>
    <name>dfs.secondary.http.address</name>
    <value>${your-secondarynamenode}:50090</value>
    <description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
</property>

*注:1、実際にはdfs.http.addressはsecondaryでのみ設定、dfs.secondary.http.addressはnamenodeのみで設定でき、管理を容易にするためにクラスタのすべてのマシンが同じように構成されています.
2、デフォルトポート(namenode:50700、secondary:50090)を使用する場合は、この構成を省略できます.
2.core-siteを修正する.xmlファイル
<property>
    <name>fs.checkpoint.period</name>
    <value>3600</value>
    <description>The number of seconds between two periodic checkpoints.</description>
</property>
<property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value>
    <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired.  </description>
</property>
<property>
    <name>fs.checkpoint.dir</name>
    <value>${hadoop.tmp.dir}/dfs/namesecondary</value>
    <description>Determines where on the local filesystem the DFS secondary namenode should store the temporary images to merge.If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy.</description>
</property>

*注意:この構成はsecondaryで設定できます.管理を容易にするために、クラスタのすべてのマシンが同じように構成されています.
3.hdfsを再起動し、正常に起動しているかどうかを確認する
(*注:このステップではhdfsを再起動せずにsecondaryで直接sh$HADOOP_HOME/bin/hadoop-daemon.sh start secondarynamenodeでsecondaryNamenodeを起動することもできます)
(1)再起動
sh $HADOOP_HOME/bin/stop-dfs.sh
sh $HADOOP_HOME/bin/start-dfs.sh

(2)uriチェック
http://namenode:50070/#namenodeのチェック
http://sencondnamenode:50090/#secondaryのチェック
(3)チェックリスト
dfsをチェックします.name.dir namenode:/data1/hadoop/name
     current
     image
     previous.checkpoint
     in_use.lock#主にこのファイルがあるのを見て、ファイルのタイムスタンプはnamenodeの起動時間を表します
検査fs.checkpoint.dir secondary:${hadoop.tmp.dir}/dfs/namesecondary
     current
     image
     in_use.lock#は主にこのファイルを見て、ファイルのタイムスタンプはsecondnamenodeの起動時間を表します
(4)checkpointが正常かチェック
テストを容易にするためにパラメータfsを調整する.checkpoint.period=60,fs.checkpoint.size=10240
hdfsに対していくつかのファイルの削除操作をして、${dfs.name.dir}/current/editsと${fs.checkpoint.dir}/current/editsの変化を見ます
二、namenode故障回復(importCheckpoint)
*注意事項:
(1)任意のdatanodeを一時的にnamenodeとして使用するのを容易にするために、datanodeとnamenodeの構成はconfディレクトリの下のすべてのファイル、ディレクトリ構造、環境変数をそっくり含む必要がある.
(2)新しいnamenodeのホスト名を元のnamenodeと一致させるには、ホスト名がhostsで書かれている場合はdatanode hostsファイルを一括置換する必要があります(内部ドメイン名サービスが最良で、ドメイン名の指向を変更すればよい).
(3) fs.checkpoint.dirの内容は非常に重要で、secondnamenodeが故障しないことを保証できないため、secondnamenode fsを定期的に行う必要がある.checkpoint.dirの内容をバックアップする
(4)最近のチェックから障害発生までの時間の内容が失われる,fs.checkpoint.periodパラメータ値は、頻繁ではなく、可能な限りデータの完全性を保証するためにバランスをとる必要があります.デフォルトは1時間です.
リカバリ手順:
(0)オプションで、namenodeホスト名が変更された場合(アプリケーションに影響を与えないように変更しないほうがよい)、変更する必要があります.
    [core-site.xml] fs.default.name=新しいnamenode
    [hdfs-site.xml] dfs.http.address=新しいnamenode
    [mapred-site.xml]mapred.job.tracker=新しいjobtracker、jobtrackerがnamenodeと同じマシンにある場合
(1)新しいnamenode${dfs.name.dir}ディレクトリが存在し、その内容が空であることを確認する
(2)SecondaryNameノードの${fs.checkpoint.dir}のすべてを新しいNameノードの${fs.checkpoint.dir}ディレクトリにコピーする
(3)新機器での実行
        hadoop namenode -importCheckpoint 
このステップは${fs.checkpoint.dir}から${dfs.name.dir}を復元し、namenodeを動かします.
(4)ファイルblock整合性チェック
        hadoop fsck/
(5)namenodeを停止しcrrl+Cまたはセッション終了
(6)新しいnamenode${fs.checkpoint.dir}ディレクトリのファイルを削除する(きれいに保つ)
(7)namenodeを正式に起動し、復旧作業を完了する
        sh $HADOOP_HOME/bin/hadoop_daemon.sh start namenode