Ubuntu 环境下 HDFS 版本升级与迁移实操指南
一 升级策略与前置检查
- 升级方式选择
- 滚动升级:要求集群为 HA,可在不停机条件下逐台升级 NameNode/DataNode,适用于 Hadoop 2.4.0+。升级期间仅涉及 NN/DN,多数情况下 JournalNode/ZooKeeper 可不升级。完成后执行 finalize。
- 停机升级:适用于 非HA 或无法滚动的场景。核心是 NameNode 重启,DataNode 可滚动。
- 兼容性要点
- 仅当 NameNode 布局版本 与 DataNode 布局版本 均未变化时,才支持从新版本降级回升级前版本;回滚要求停机,且只能在滚动升级开始后、终止前执行。
- 前置检查清单
- 在测试环境演练全流程;阅读目标版本的 Release Notes 与 不兼容变更。
- 使用 hdfs fsck 全面检查文件系统健康,并保存升级前后报告以便比对。
- 清理 HDFS 临时目录 与本地临时文件,避免干扰升级。
- 完整备份 NameNode 元数据目录 dfs.namenode.name.dir 等关键配置与目录。
- 规划回滚/降级路径与回退窗口,准备应急脚本与监控告警。
二 滚动升级步骤 HA 集群
- 准备阶段
- 对每个 Namespace 执行:
hdfs dfsadmin -rollingUpgrade prepare 创建回滚 fsimage。
- 执行:
hdfs dfsadmin -rollingUpgrade query,等待出现 “Proceed with rolling upgrade”。
- 升级 NameNode
- 选择一台 Standby NN,停机升级并以
-rollingUpgrade started 启动为 Standby。
- 通过 ZK/手动 故障转移,使该 NN 成为 Active,原 Active 变为 Standby。
- 升级原 Active NN,并以
-rollingUpgrade started 启动为 Standby。
- 升级 DataNode
- 按批次(如按机架)选择 DN 子集:
- 执行:
hdfs dfsadmin -shutdownDatanode <DN_HOST:IPC_PORT> upgrade 关闭 DN(进入升级模式)。
- 执行:
hdfs dfsadmin -getDatanodeInfo <DN_HOST:IPC_PORT> 确认已停止。
- 升级并重启 DN,重复至全集群完成。
- 完成阶段
- 全部验证通过后,执行:
hdfs dfsadmin -rollingUpgrade finalize 完成滚动升级(此后不可回滚)。
三 停机升级步骤 非 HA 集群
- 停止 YARN/MapReduce 守护进程,随后停止 HDFS。
- 备份 NameNode 目录 dfs.namenode.name.dir 等关键元数据与配置。
- 在所有节点部署新版本 Hadoop,注意 HADOOP_HOME 与配置文件路径。
- 使用升级方式启动 HDFS:
$NEW_HADOOP_HOME/bin/start-dfs.sh -upgrade,并通过 hdfs dfsadmin -upgradeProgress status 观察进度。
- 校验集群健康(建议短暂进入 安全模式 只读检查),确认无误后启动 YARN/MapReduce。
- 如需回滚(尚未 finalize):停止新守护进程,使用旧版本以
-rollback 启动:$OLD_HADOOP_HOME/bin/start-dfs.sh -rollback。
- 验证稳定后执行定妥升级:
hdfs dfsadmin -finalizeUpgrade(执行后不可回滚)。
四 跨集群数据迁移 DistCp 实操
- 基本命令
- 同版本:
hadoop distcp hdfs://srcNN:8020/path hdfs://dstNN:8020/path
- 异版本(常用 HTTP 桥接):
hadoop distcp -m 50 hftp://srcNN:50070/path hdfs://dstNN:8020/path
- 常用选项:
-p(保留权限/属主/时间戳)、-update(增量更新)、-append(追加)、-bandwidth(限速)、-i(忽略失败)、-overwrite(覆盖)
- 迁移规划与网络
- 预估数据量:
hdfs dfs -du -h /,按业务/目录分批迁移,避开高峰时段。
- 保障 源/目的集群网络 带宽与稳定性;跨机房/跨公网建议使用 对象存储 作为中转。
- 一致性校验与切换
- 迁移后对比 文件数量/大小/校验和,对失败文件重试或单独补迁。
- 逐步将业务与客户端指向新集群,保留回退窗口,观察 监控/日志 后再下线旧集群。
五 回滚降级与常见问题
- 回滚与降级
- 滚动升级阶段可随时执行降级(逐节点回到旧版本软件,数据不动),但回滚需停机,且仅在滚动升级开始后、终止前可用。
- 执行
hdfs dfsadmin -rollingUpgrade finalize 后将不可回滚/不可降级;若需再次升级,必须先定妥前一次升级。
- 常见问题与要点
- 升级失败或异常可先停机,用旧版本以
-rollback 回滚;回滚会回到升级前状态。
- JournalNode/ZooKeeper 多数情况下无需随 HDFS 升级;若确需升级,可能导致停机。
- 升级期间建议短暂进入 安全模式 做只读校验,避免业务写入干扰。
- 升级前清理 临时目录,升级后对比 fsck 报告,确保块与副本健康。