发现测试集群HDFS报丢失块的告警。 对块进行修复
前言
发现测试集群HDFS报丢失块的告警。
如果块损坏过多,超过设置的百分比,NameNode 会进入安全模式。需要退出安全模式处理
处理
解决方法:
- 如果文件不重要,可以直接删除此文件;或删除后重新复制一份到集群中
- 如果不能删除,需要从上面命令中找到发生在哪台机器上,然后到此机器上查看日志。
先确认集群有没有datanode宕机
sudo -u hdfs hdfs dfsadmin -report
查看丢失块的信息
# 需要hdfs权限权限操作。如果没有hdfs 账号,则在命令前加 sudo -u hdfs ,以hdfs权限运行该命令
# 检查整个文件系统
hdfs fsck /
# 查看损坏块的信息
hdfs fsck -list-corruptfileblocks
# 查看损坏块的信息 -locations位置信息 -blocks各个块的信息 -files显示文件信息,包括文件名称,大小,块数量和健康状况(是否有缺失的块)
hdfs fsck /tmp/sort-data/part-r-00016 -locations -blocks -files
# 如果hadoop不能自动恢复,则只能删除 corrupted blocks;
# 此方式会将丢失的块全部删除
hdfs fsck / -delete
HDFS block丢失过多进入安全模式(Safe mode)的解决方法
前面介绍的是简单的块损坏。 后面遇到一次丢失块比例高达 13% 的测试环境。
由于系统断电,内存不足等原因导致 dataNode 丢失超过设置的丢失百分比,系统自动进入安全模式。
解决办法就是退出安全模式。清理损坏的块。
注意: 这种方式会出现数据丢失,损坏的block会被删掉 请慎重
退出安全模式:
执行健康检查,删除损坏掉的block。 hdfs fsck / -delete
参考链接