現象:選擇抑制後發現有些風機查詢數據一直查不出來,也沒報什麼錯誤,只是查詢超時,程序取數據時卡在ResultSet.next()中。
原因:抑制只是讓警告不再報出來,塊損壞對於查詢的影響仍然存在。
解決方案:
- 查看損壞的塊:
hdfs fsck -list-corruptfileblocks
- 自動修復
1)當數據塊損壞後,DataNode節點執行directoryscan操作之前,都不會發現損壞;
默認是6小時掃描一次,配置項爲dfs.datanode.directoryscan.interval : 21600
2)在DN向NN進行blockreport前,都不會恢復數據塊;
默認爲6小時執行一次,配置項爲dfs.blockreport.intervalMsec : 21600000
當NN收到blockreport纔會進行恢復操作。
- 手動修復
hdfs debug recoverLease -path /blockrecover/blocktest.md -retries 10 # 重試10次
- 在錫盟遇到的執行手動修復雖然成功了,但是檢測損壞的塊仍然可以檢測出來,直接刪除損壞的塊:
hdfs fsck / -delete
- 執行完後再打開管理界面就不會報塊丟失了,執行查詢也沒有問題,只是風機可能會丟失一段時間的數據。
- 參考:https://blog.csdn.net/weixin_44131414/article/details/100016728
https://www.cnblogs.com/yinzhengjie/p/10923309.html
- 更多hdfs相關命令:
https://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#fsck