问题截图:

一、原因分析
1. 元数据损坏(NameNode故障)
NameNode的元数据文件(fsimage和edits)损坏,导致无法正确加载文件系统树。或者是元数据与数据块的实际存储位置不一致(例如DataNode上报的块信息与NameNode记录不符)。通常是因为没有正常关机导致NameNode进程异常终止或磁盘故障。还有可能是手动修改元数据文件或误删关键文件。
2. 数据块丢失或损坏(DataNode故障)
-
DataNode的磁盘损坏,导致存储的数据块无法读取。
-
网络分区或DataNode进程崩溃,导致块副本丢失(低于HDFS副本因子要求)。
3. 人为操作失误
误执行hdfs dfs -rm命令删除关键系统文件或者是格式化NameNode后未正确恢复备份。
以上几种原因都会导致磁盘的损坏。下面是几种解决方案。
二、解决方案
1.快照恢复
如果上一次操作完之后有拍摄快照,就可以通过恢复快照来轻松地解决问题。

恢复每个结点的快照即可。
再重新启动集群。
start-dfs.sh

再此查看磁盘就恢复“health”了

如果没有拍摄快照解决起来会比较麻烦,所以在操作完成之最好拍摄快照。
2. 检查HDFS健康状态
使用 hdfs fsck 命令全面扫描文件系统,定位损坏的块和文件:
hdfs fsck / -list-corruptfileblocks -delete
参数说明:
-
-list-corruptfileblocks:列出所有损坏的块。 -
-delete:自动删除无法修复的文件(请谨慎使用,对于重要的文件来说这是不可取的)。
3.恢复NameNode元数据
若元数据损坏,优先从备份恢复:
# 1. 停止NameNode服务
hdfs --daemon stop namenode
# 2. 恢复fsimage和edits
cp /backup/fsimage_* /hadoop-data/name/current/
cp /backup/edits_* /hadoop-data/name/current/
# 3. 重启NameNode并进入恢复模式
hdfs namenode -recover
4. 替换损坏的DataNode
若某个DataNode持续报错,替换其硬件或节点:
# 1. 停止问题DataNode
hdfs --daemon stop datanode
# 2. 从集群中解除该节点
hdfs dfsadmin -refreshNodes
# 3. 部署新节点并重新注册
hdfs dfsadmin -refreshNodes
1351

被折叠的 条评论
为什么被折叠?



