saveNamespaceコマンドによる復旧

どうやら以下のバグにぶつかっていたようで、
http://www.cloudera.co.jp/blog/riskofhdfsmetadatacorruptionduetodfs-name-dirwithidenticaldirectoryend-component.html


NameNodeのMasterとセカンダリでメタデータの不整合が起きて、
それにより、SecondaryNamenodeでimageとeditsのマージに失敗する事象が起きました。

解決方法も上記のURLの通りで解決しました。
ただ、namenodeだけにビビリました。。
メタデータ不整合とか怖い・・(CDH4以上なら安心のようで)
あと、CDH4以上でもスキーマを日本語で作るとメタデータが落ちる?壊れるという噂も・・

おおざっぱな流れとしては、

1. セカンダリネームノードを停止します。
->セカンダリ止めます。
2. HDFS以外の全てのクラスタでの活動を停止します。
->HDFSでの作業になるので、その上で動いてるhbaseやmapreduceは止めて安全にやるってことですね。
3. すべてのdfs.name.dirディレクトリのバックアップを作成します。
->その時のメタとエディッツのバックアップです。
4. hdfsユーザでHDFSをセーフモードにします。
$ hadoop dfsadmin -safemode enter
->セーフモードにします。読み込みのみのモードになります。
5. saveNamespaceコマンドでNNのイメージを保存します。
$ hadoop dfsadmin -saveNamespace
->メモリ上のイメージファイルをファイルとして保存してくれます。これで現状のイメージファイルと整合性がとれるメタデータになります。
6. 全てのdfs.name.dirディレクトリを保存することによって、この新しいfsimage用の別のバックアップを作成します。
->バックアップ作成です。
7. ネームノードを停止します。
->下の設定適用のためとメタデータ読み直しのための停止
8. ユニークなパスのエンドコンポーネントを使うため、ローカルファイルシステムのdfs.name.dirディレクトリをリネームします。
->このバグのワークアラウンド処理です。