2013年6月18日 星期二

HDFS Block救援心得分享

源起

總之悲劇是這樣發生了,HDFS在去年重啟失敗後,當初重啟時沒注意到edit.log有間斷的情況下, 重啟之後namenode發現datanode有多餘的磁區,就下達指令請datanode把那些磁區刪除...
接下來把edit.log補齊之後,這時候namenode的index都恢復了,但是datanode上的磁區已經消失了...所以使用hadoop fsck 的時候,發現很多遺失的區塊...因為是namenode下令刪掉,所以什麼副本的也都說再見了...非常慘烈..

解決方式

後來想想反正HDFS底層也是操作File Systems,就試試檔案救援工具試試看,試了幾個發現tesdisk還不錯用,還可以到檔案的目錄下針對遺失的block進行恢復,不過僅限於剛好儲存的檔案小於block size,因為如果被切割的話,要合併真的就比較麻煩一點,不過如果能把block放回原本的位置,namenode的index能對應的話,我想應該沒有問題吧。