问题截图:不良 : 群集中有 25 个 丢失块 块。群集中共有 56,817 个块。百分比 丢失块: 0.04%。 临界阈值:任意。
如果解决参考
http://www.voidcn.com/article/p-hswstvqs-tr.html
1:检查缺失块
确定此问题的最简单方法是在文件系统上运行fsck。如果已经设置了hadoop环境变量,则应该可以使用/路径,如果不是hdfs://ip.or.hostname:50070 /。
hdfs fsck /
或者
hdfs fsck hdfs://ip.or.hostname:50070/
或者
hdfs fsck / -files -blocks -racks -locations
查看详细的缺失块
hdfs fsck / | egrep -v '^\.+$' | grep -v eplica
截图
2.查看上面某一个文件的情况\
hdfs fsck /path/to/corrupt/file -locations -blocks -files
3.删除某个不重要的缺失块
注意千万不要使用
hdfs dfs -rm 文件路径(手动删除,确实块数据并不改变,可以直接使用hdfs fsck -delete 删除所有缺失的块)
确定一下文件是否能查询的到
hdfs dfs -get /user/hive/warehouse/test_prd.db/tdm_business_gongdan_info_mi/mi=20200831/000000_0_copy_98
删除文件
hdfs fsck -delete /user/hive/warehouse/test_prd.db/tdm_business_gongdan_info_mi/mi=20200831/000000_0_copy_98
可是查看缺失的块少1
或者直接删除所有确实块(记得查看确实块信息,后面补数据)
执行
hdfs fsck -delete
解决
解决方法
1:如果文件不重要,可以直接删除此文件;或删除后重新复制一份到集群中
2:如果不能删除,需要从上面命令中找到发生在哪台机器上,然后到此机器上查看日志。
参考
http://centoshowtos.org/hadoop/fix-corrupt-blocks-on-hdfs/
http://stackoverflow.com/questions/19205057/how-to-fix-corrupt-hadoop-hdfs