saveNamespaceコマンドによる復旧
どうやら以下のバグにぶつかっていたようで、
http://www.cloudera.co.jp/blog/riskofhdfsmetadatacorruptionduetodfs-name-dirwithidenticaldirectoryend-component.html
NameNodeのMasterとセカンダリでメタデータの不整合が起きて、
それにより、SecondaryNamenodeでimageとeditsのマージに失敗する事象が起きました。
解決方法も上記のURLの通りで解決しました。
ただ、namenodeだけにビビリました。。
メタデータ不整合とか怖い・・(CDH4以上なら安心のようで)
あと、CDH4以上でもスキーマを日本語で作るとメタデータが落ちる?壊れるという噂も・・
おおざっぱな流れとしては、
- セカンダリネームノードを停止します。
->セカンダリ止めます。 - HDFS以外の全てのクラスタでの活動を停止します。
->HDFSでの作業になるので、その上で動いてるhbaseやmapreduceは止めて安全にやるってことですね。 - すべてのdfs.name.dirディレクトリのバックアップを作成します。
->その時のメタとエディッツのバックアップです。 - hdfsユーザでHDFSをセーフモードにします。
$ hadoop dfsadmin -safemode enter
->セーフモードにします。読み込みのみのモードになります。 - saveNamespaceコマンドでNNのイメージを保存します。
$ hadoop dfsadmin -saveNamespace
->メモリ上のイメージファイルをファイルとして保存してくれます。これで現状のイメージファイルと整合性がとれるメタデータになります。 - 全てのdfs.name.dirディレクトリを保存することによって、この新しいfsimage用の別のバックアップを作成します。
->バックアップ作成です。 - ネームノードを停止します。
->下の設定適用のためとメタデータ読み直しのための停止 - ユニークなパスのエンドコンポーネントを使うため、ローカルファイルシステムのdfs.name.dirディレクトリをリネームします。
->このバグのワークアラウンド処理です。