Debian 环境下 HDFS 配置恢复指南
一、恢复前准备
- 明确恢复目标:仅恢复配置文件,还是连同 NameNode 元数据与 JournalNode 编辑日志一起回滚;是否从 HA 切回 非HA。
- 准备可用的备份:包括 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves/hadoop-env.sh 等,以及 NameNode 元数据目录 dfs.namenode.name.dir 与(若使用 HA)JournalNode 数据目录。
- 规划停机窗口与回滚方案:先停服务、再恢复、最后逐组件启动并校验。
- 同步操作到所有节点:配置文件需在各节点保持一致;元数据与日志目录按角色在各节点分别恢复。
- 关键目录与文件定位:
- 配置目录通常为 $HADOOP_HOME/etc/hadoop(或 /etc/hadoop);
- NameNode 元数据目录由 dfs.namenode.name.dir 指定;
- JournalNode 数据目录由 dfs.journalnode.edits.dir 指定;
- 日志目录通常为 $HADOOP_HOME/logs。
二、仅配置文件恢复步骤
- 停止集群:在 NameNode 执行
- 仅 HDFS:执行 $HADOOP_HOME/sbin/stop-dfs.sh
- 含 YARN:再执行 $HADOOP_HOME/sbin/stop-yarn.sh
- 备份当前配置:
- 示例:tar czf /backup/hadoop-conf-$(date +%F).tgz -C $HADOOP_HOME/etc/hadoop .
- 恢复配置:
- 从备份拷贝到 $HADOOP_HOME/etc/hadoop(或 /etc/hadoop),覆盖前先核对关键项:
- core-site.xml:如 fs.defaultFS
- hdfs-site.xml:如 dfs.replication、dfs.namenode.name.dir、dfs.datanode.data.dir
- 环境变量 hadoop-env.sh 中的 JAVA_HOME
- 分发到所有节点:
- 示例:for h in node1 node2 node3; do scp -r $HADOOP_HOME/etc/hadoop $h:$HADOOP_HOME/etc/; done
- 启动集群并校验:
- 启动:先 start-dfs.sh,再 start-yarn.sh
- 校验:
- 进程:jps 应见到 NameNode、DataNode、ResourceManager、NodeManager 等
- 日志:tail -f $HADOOP_HOME/logs/hadoop-*.log
- Web:http://:9870(NameNode Web UI)与 http://:8088(ResourceManager)
- 若仅为端口或地址错误,修正后重启对应组件即可。
三、从备份恢复 NameNode 元数据与 EditLog
- 适用场景:配置恢复后 NameNode 无法启动 或 元数据损坏/不完整,且你拥有可用的 fsimage + EditLog 备份或 JournalNode 数据。
- 停止集群:同第二节步骤 1。
- 恢复 NameNode 元数据目录:
- 将备份的 dfs.namenode.name.dir 整体拷回目标路径(覆盖前先备份当前目录);
- 若只有 EditLog 缺失,可从 JournalNode 同步补齐:
- 示例:cp -i /dfs/journal//current/edits_0* /dfs/name/current/(不要覆盖已有新文件)。
- 若从 HA 切回 非HA:
- 先按“第二节”恢复非 HA 的 core-site.xml/hdfs-site.xml;
- 清理外部/残留 HA 状态:
- ZooKeeper:删除 /hadoop-ha/ 等相关 znode(如 rmr /hadoop-ha);
- 各节点:清理 JournalNode 数据(如 rm -rf /dfs/journal/*);
- 清理备用 NameNode 数据(如 rm -rf /dfs/name/*)。
- 启动并校验:
- 启动 NameNode,观察日志直至离开 Safemode;
- 执行 hdfs dfsadmin -report 查看 DataNode 注册与健康状态;
- 必要时执行 hdfs fsck / 检查文件系统健康。
四、常见故障与修复要点
- 配置错误导致启动失败:
- 现象:NameNode/DataNode 启动即退出;
- 处理:核对 core-site.xml/hdfs-site.xml 关键项与 JAVA_HOME;必要时回滚到上一版配置并重启。
- 元数据不一致或 VERSION 异常:
- 现象:启动报 IncorrectVersionException 或元数据版本冲突;
- 处理:清理 dfs.namenode.name.dir/current/VERSION 等不一致文件后,使用有效备份或 JournalNode 重新引导启动。
- 从备份恢复后副本不足:
- 现象:hdfs dfsadmin -report 显示 Under-Replicated Blocks;
- 处理:等待 NameNode 自动补齐副本,或调整 dfs.replication 后执行 hdfs balancer 再平衡。
- 无法进入 Safemode:
- 现象:NameNode 长时间卡在 Safemode;
- 处理:确认 DataNode 已注册且块报告正常,必要时在安全模式内执行 hdfs dfsadmin -safemode leave。
五、重要注意事项
- 重新格式化 NameNode(hdfs namenode -format)会清空 HDFS 所有数据,仅在无可用备份且可重建数据时作为最后手段。
- 任何配置变更与恢复操作前,务必先备份当前配置与元数据目录;变更后按“先停后启、逐组件验证”的顺序执行。
- 生产环境建议启用 HDFS 快照 与定期 元数据/EditLog 备份,并在恢复后使用 fsck、balancer、Web UI 进行全量校验。