HDFS误格式化后恢复方法
目录
恢复前提:
- HA集群的HDFS
场景1
正在运行中的HDFS集群,所有服务正在正常运行。
假如误操作直接执行了`
|
|
进行格式化,会因当前节点的NameNode未停止而报错,无法格式化。
场景2
- 正在运行中的HDFS集群,所有服务正在正常运行。
- 主节点的NameNode已经停止,主节点执行了hdfs namenode -format -force格式化操作
- 备节点NameNode目录完好,DataNode数据仍然在
后果:
- 当前节点的NameNode数据目录就会被成功格式化。NameNode数据目录里VERSION文件里存储的clusterID与另一NameNode节点会不一致。
- 所有JournalNode节点的数据目录都被格式化。JournalNode数据目录里的VERSION文件也都被重置为新的clusterID
- 备NameNode会因JournalNode的VERSION文件里存储的集群ID和本身不一致,导致异常退出
- ZKFC会因NameNode退出而退出
- 此时HDFS功能不可用
- 数据无丢失
修复方法:
-
启动所有JournalNode节点。(JournalNode不会因此场景而自动退出,但保险起见需要确认是否都启动)
-
未被格式化的备节点执行以下命令,用当前节点NameNode的VERSION文件修复JournalNode的VERSION文件,并拷贝当前NameNode数据目录下所有edits文件到所有JournalNode的目录上
1
hdfs namenode -initializeSharedEdits -force
-
启动备节点的NameNode
-
启动备节点的ZKFC
-
此时HDFS功能暂时恢复正常,数据无丢失
-
误操作的主节点执行以下命令恢复NameNode数据
1
hdfs namenode -bootstrapStandby -force -skipSharedEditsCheck
-
启动主节点的NameNode
-
启动主节点的ZKFC
-
此时主节点正常启动,状态为备机。
本次恢复数据无丢失。