文件ruozedata.md
1 | 上传: |
直接DN节点上删除文件一个block的一个副本(3副本)
1 | 删除块和meta文件: |
手动修复hdfs debug
1 | -bash-4.2$ hdfs |grep debug |
自动修复
1 | 当数据块损坏后,DN节点执行directoryscan操作之前,都不会发现损坏; |
具体参考生产上HDFS(CDH5.12.0)对应的版本的文档参数:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.12.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
总结
生产上本人一般倾向于使用 手动修复方式,但是前提要手动删除损坏的block块。
切记,是删除损坏block文件和meta文件,而不是删除hdfs文件。
当然还可以先把文件get下载,然后hdfs删除,再对应上传。
切记删除不要执行: hdfs fsck / -delete 这是删除损坏的文件, 那么数据不就丢了嘛;除非无所谓丢数据,或者有信心从其他地方可以补数据到hdfs!
思考题
- 那么如何确定一个文件的损失的块位置,哪几种方法呢?
- CDH的配置里搜索没有这两个参数,怎么调整生效呢?
块扫描: https://blog.cloudera.com/blog/2016/12/hdfs-datanode-scanners-and-disk-checker-explained/