一、原因
由斷電或其它原因引起的HDFS服務不正常或者塊損壞
二、解決
(一)、檢查HDFS的文件的健康狀態
hdfs fsck /
(二)、查看損壞的塊以及文件的對應關係
hdfs fsck -list-corruptfileblocks
(三)、解決辦法:
數據可以從其它地方找到(比如MySQL)
將數據重新刷新一份到HDFS上
hdfs fsck / delete
# 刪除損壞的文件,
# 然後重刷一份到HDFS
數據沒辦法從其它地方找到
- 查看相應文件的數據塊狀態及其副本存放的位置
hdfs fsck <file path> -files -locations -blocks -racks
這種方式只能顯示出好的副本存放的位置,並不能找到壞的副本存放的位置
找到對應的文件,先下載一份到本地,然後將HDFS上的刪除,再重新上傳
hdfs dfs -get <path>
hdfs dfs -rm <path>
hdfs dfs -put <loacal path> <HDFS path>
- 如果可以找到損壞的副本位置,可以進行手動修復,先將其刪除,然後執行下列命令
刪除副本文件,而非hdfs文件
hdfs debug recoverLease -path <path> -retries 10
- 自動修復
在DN向NN進行blockReport的時候,進行自動修復,默認時間間隔是6h。