hadoop hdfs missing blocks & 安全模式
近期在做磁碟有關的一些測試時,最先是發現habse出現了RIT而且還是meta表的RIT,檢視hadoop,出現了hdfs missing blocks的問題,hadoop master上一上來就能看見報該問題。
There are 88 missing blocks. The following files may be corrupted: blk_1076662996 /**/default/usertable/c31c955d868aa590ee08776c4e47f648/cf/e04822ace0e348e38d09b55e5124cfdc blk_1076663064 /**/default/usertable/c31c955d868aa590ee08776c4e47f648/cf/e04822ace0e348e38d09b55e5124cfdc blk_1076743273 /**/default/********1029_201810/bdfb0c7d8651f9ba99eaec22dc42cb13/f/afc59021d518457b9152e4a1c057fce4 blk_1076663044 /**/default/usertable/c31c955d868aa590ee08776c4e47f648/cf/e04822ace0e348e38d09b55e5124cfdc blk_1076743287 /**/default/*****1029_201810/bdfb0c7d8651f9ba99eaec22dc42cb13/f/afc59021d518457b9152e4a1c057fce4 blk_1076663096 /**/default/usertable/c31c955d868aa590ee08776c4e47f648/cf/e04822ace0e348e38d09b55e5124cfdc blk_1076743312 /**/default/******1029_201810/bdfb0c7d8651f9ba99eaec22dc42cb13/f/afc59021d518457b9152e4a1c057fce4 blk_1073743276
在網上查看了一些部落格,missing block的意思是hdfs上的塊不存在了,並不是少於3份,很難恢復。但是, the "blocks missing" it means that those blocks are not available in the live data nodes of the cluster, please verify any data node is down/unhealthy and bring it back - might rectify the missing blocks.
解決方案:
2. 參考部落格的一些做法 先用 hdfs fsck / 檢查missing block,再用 hdfs fsck -delete + block 可以移除 missing block
這裡要注意,如果datanode丟失的資料塊過多,達到一定的比例,會使得hadoop進入安全模式,也就是除了讀不能進行其他任何操作,從而hbaseRS也處於有問題的狀態。如果進入安全模式要先解決安全模式的問題才能使用 hdfs fsck delete。
安全模式的問題可以參考下文第三個部落格連結。有兩種辦法:
1. hadoop dfsadmin -safemode leave命令,強制離開
2. 修改dfs.safemode.threshold.pct,預設是0.999,修改為一個比較小的值。
此外分享給小可愛們一個我自己寫的蹩腳指令碼用來刪除MISSING BLOCK:
for (( i=0; i<100; i++ )) do hdfs fsck / | grep 'MISSING' | head -n 1 | cut -d : -f 1 | xargs hdfs fsck -delete done
效率不高,我自己用著夠用了。可能有不對的地方,小可愛們水平高的發現問題自助修改哈。
參考部落格: