目录

HDFS误格式化后恢复方法

目录

恢复前提:

  • HA集群的HDFS

场景1

正在运行中的HDFS集群,所有服务正在正常运行。

假如误操作直接执行了`

1
hdfs namenode -format -force

进行格式化,会因当前节点的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功能不可用
  • 数据无丢失

修复方法:

  1. 启动所有JournalNode节点。(JournalNode不会因此场景而自动退出,但保险起见需要确认是否都启动)

  2. 未被格式化的备节点执行以下命令,用当前节点NameNode的VERSION文件修复JournalNode的VERSION文件,并拷贝当前NameNode数据目录下所有edits文件到所有JournalNode的目录上

    1
    
    hdfs namenode -initializeSharedEdits -force
    
  3. 启动备节点的NameNode

  4. 启动备节点的ZKFC

  5. 此时HDFS功能暂时恢复正常,数据无丢失

  6. 误操作的主节点执行以下命令恢复NameNode数据

    1
    
    hdfs namenode -bootstrapStandby -force -skipSharedEditsCheck
    
  7. 启动主节点的NameNode

  8. 启动主节点的ZKFC

  9. 此时主节点正常启动,状态为备机。

本次恢复数据无丢失。