HDFS 数据块损坏

一、原因

由断电或其它原因引起的HDFS服务不正常或者块损坏

二、解决

(一)、检查HDFS的文件的健康状态

hdfs fsck /

(二)、查看损坏的块以及文件的对应关系

hdfs fsck -list-corruptfileblocks

(三)、解决办法:

数据可以从其它地方找到(比如MySQL)

将数据重新刷新一份到HDFS上

hdfs fsck / delete
# 删除损坏的文件,
# 然后重刷一份到HDFS
数据没办法从其它地方找到
  1. 查看相应文件的数据块状态及其副本存放的位置
hdfs fsck  -files  -locations -blocks  -racks

这种方式只能显示出好的副本存放的位置,并不能找到坏的副本存放的位置
找到对应的文件,先下载一份到本地,然后将HDFS上的删除,再重新上传

hdfs dfs -get 
hdfs dfs -rm 
hdfs dfs -put  
  1. 如果可以找到损坏的副本位置,可以进行手动修复,先将其删除,然后执行下列命令
    删除副本文件,而非hdfs文件
hdfs debug recoverLease -path  -retries 10
  1. 自动修复
    在DN向NN进行blockReport的时候,进行自动修复,默认时间间隔是6h。

你可能感兴趣的:(hadoop,HDFS,数据块损坏)