轉載:http://www.blogjava.net/badqiu/archive/2011/12/14/366178.html
一.崩潰原因
搭建的是一個hadoop測試集羣,所以將數據備份參數設置爲dfs.replication=1,這樣如果有一臺datanode損壞的話,數據就會失去。但不幸的是,剛好就有一臺機器由於負載過高,導致數據操壞。進而後面需要重啓整個hadoop集羣,重啓後啓動namenode啓動不了。報如下錯誤:
二.修復namenode
hadoop 集羣崩潰了. 導致namenode啓動不了.
1. 刪除 namenode主節點的metadata配置目錄
2. 啓動secondnamenode
使用start-all.sh命令啓動secondnamenode,namenode的啓動不了不管
3. 從secondnamenode恢復
使用命令: hadoop namenode -importCheckpoint
恢復過程中,發現數據文件有些已經損壞(因爲dfs.replication=1),所以一直無法退出安全模式(safemode),一直報如下提示:
The ratio of reported blocks 0.8866 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
4.強制退出safemode
hadoop dfsadmin -safemode leave
最後啓動成功,查看hdfs網頁報警告信息:
5.檢查損壞的hdfs文件列表
使用命令可以打印出損壞的文件列表:
打印結果:
/user/hive/warehouse/pay_consume_orgi/dt=2011-06-29/consume_2011-06-29.sql: CORRUPT block blk_977550919055291594
/user/hive/warehouse/pay_consume_orgi/dt=2011-06-29/consume_2011-06-29.sql: MISSING 1 blocks of total size 1307147 BStatus: CORRUPT
Total size: 235982871209 B
Total dirs: 1213
Total files: 1422
Total blocks (validated): 4550 (avg. block size 51864367 B)
********************************
CORRUPT FILES: 277
MISSING BLOCKS: 509
MISSING SIZE: 21857003415 B
CORRUPT BLOCKS: 509
********************************
沒有冗餘備份,只能刪除損壞的文件,使用命令:
三.總結
一定需要將你的secondnamenode及namenode分開在不同兩臺機器運行,增加namenode的容錯性。以便在集羣崩潰時可以從secondnamenode恢復數據.