HDFS block损坏修复

HDFS block损坏修复

校验

检查损失数据块:hdfs fsck -list-corruptfileblocks
查看到详细IP地址: hdfs fsck /directory/application_1587124446083_0011 -locations -blocks -files
然后可以查看namenode log信息定位错误
[hadoop@hadoop001 hadoop]$ hdfs fsck /
Connecting to namenode via http://yws76:50070/fsck?ugi=hdfs&path=%2F
FSCK started by hdfs (auth:SIMPLE) from /192.168.0.76 for path / at Sun Mar 03 14:44:44 CST 2019
…Status: HEALTHY
Total size: 50194618424 B
Total dirs: 354
Total files: 1079
Total symlinks: 0
Total blocks (validated): 992 (avg. block size 50599413 B)
Minimally replicated blocks: 992 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 3
Average block replication: 3.0
Corrupt blocks: 0
Missing replicas: 0 (0.0 %)

Number of data-nodes: 3
Number of racks: 1
FSCK ended at Sun Mar 03 14:44:45 CST 2019 in 76 milliseconds

The filesystem under path ‘/’ is HEALTHY

自动修复

当数据块损坏后,DN节点执行directoryscan操作之前,都不会发现损坏;
也就是directoryscan操作是间隔6h
dfs.datanode.directoryscan.interval : 21600

在DN向NN进行blockreport前,都不会恢复数据块;
也就是blockreport操作是间隔6h
dfs.blockreport.intervalMsec : 21600000

当NN收到blockreport才会进行恢复操作。

测试

删除块和meta文件:
[hadoop@hadoop001 hadoop]$ rm -rf blk_1075808214 blk_1075808214_2068515.meta
直接重启HDFS,直接模拟损坏效果,然后fsck检查:
集群模式下,会自动修复,看不到损坏的block

手动修复

[hadoop@hadoop001 hadoop]$ hdfs |grep debug
没有输出debug参数的任何信息结果!
故hdfs命令帮助是没有debug的,但是确实有hdfs debug这个组合命令,切记。

修复命令:
[hadoop@hadoop001 hadoop]$ hdfs debug recoverLease -path /xxx.text -retries 10
recoverLease SUCCEEDED on /xxx.text

小结

生产上使用脚本,对hdfs进行监控。
遇到报错,手动进行修复,可以hdfs命令修复,或者手动下载block到本地,然后hdfs删除,再进行上传.数据量大的情况可以直接重新导入,导入之前可以进行数据比对。
hdfs fsck / -delete 这是删除损坏的文件。慎用

你可能感兴趣的:(HDFS block损坏修复)