实例
-
fsck检查(fsck是用来检测hdfs文件和block信息):
-
-bash-4.2$ hdfs fsck / ...............................................................................Status: HEALTHY Total size: 23863424 B Total dirs: 286 Total files: 791 Total symlinks: 0 Total blocks (validated): 642 (avg. block size 23863424 B) Minimally replicated blocks: 642 (100.0 %) Over-replicated blocks: 0 (0.0 %) Under-replicated blocks: 1 (0.10080645 %) Mis-replicated blocks: 0 (0.0 %) Default replication factor: 3 Average block replication: 2.998992 Corrupt blocks: 0 Missing replicas: 1 (0.033602152 %) Number of data-nodes: 3 Number of racks: 1 The filesystem under path '/' is HEALTHY
-
-
参数解释:
- status:代表这次hdfs上block检测的结果
- Total size: 代表/目录下文件总大小
- Total dirs:代表检测的目录下总共有多少个目录
- Total files:代表检测的目录下总共有多少文件
- Total symlinks:代表检测的目录下有多少个符号连接
- Total blocks(validated):代表检测的目录下有多少个block块是有效的
- Minimally replicated blocks:代表拷贝的最小block块数
- Over-replicated blocks:指的是副本数大于指定副本数的block数量
- Under-replicated blocks:指的是副本数小于指定副本数的block数量
- Mis-replicated blocks:指丢失的block块数量
- Default replication factor: 3 指默认的副本数是3份(自身一份,需要拷贝两份)
- Missing replicas:丢失的副本数
- Number of data-nodes:有多少个节点
- Number of racks:有多少个机架
-
报错显示:
- 副本数丢失一份
手动修复
- 删除损坏的块和meta文件:
rm -rf blk_XXX blk_XXX_YYYY.meta
- 修复命令:
hdfs debug recoverLease -path /XXX/文件 -retries 10 recoverLease SUCCEEDED on /XXX/文件
- 检查:
- 查看各个datanode节点的block文件和meta文件是否恢复:
- 路径:
/XXX/tmp/dfs/data/current/BPXXXXX/current/finalized/subdir0/subdir0
自动修复
- 当数据块损坏后,datanode节点执行directoryscan操作之前,都不会发现损坏,directoryscan操作间隔6h,依据:(单位:s)
dfs.datanode.directoryscan.interval : 21600
- 在datanode节点向namenode节点进行blockreport前,都不会进行恢复数据块的操作,blockreport操作间隔6h,依据:(单位:ms)
dfs.blockreport.intervalMsec : 21600000
- 只有当namenode节点收到blockreport才会进行恢复操作。
汇总
- 自动修复时间太长,建议使用手动修复方式,但是前提要手动删除损坏的block块,而且注意是删除损坏block文件和meta文件,不是删除hdfs文件。或者直接先把文件get下载,然后hdfs删除,再对应上传。
- 注意删除不要执行:
hdfs fsck / -delete这是删除损坏的文件,会造成数据丢失。