Ubuntu HDFS升级如何进行
小樊
35
2025-12-06 22:59:57
Ubuntu 上 HDFS 升级实操指南
一 升级策略与前置检查
- 明确升级路径:确认从 Hadoop 2.x → 3.x 或其他版本跨度,阅读目标版本的官方升级说明与变更清单。
- 兼容性核对:检查 Ubuntu 版本(如 22.04/24.04)、Java(推荐 OpenJDK 11+)、以及与 ZooKeeper/Hive/Spark 等组件的版本兼容性与 API 变更。
- 备份关键资产:
- HDFS 数据:优先备份业务目录(如 /user),可用 distcp/hadoop fs -cp 跨集群或到远端存储。
- 元数据与配置:完整备份 NameNode 元数据目录(dfs.namenode.name.dir)、JournalNode 目录、以及 core-site.xml/hdfs-site.xml/yarn-site.xml/mapred-site.xml 等。
- 依赖与资源:确保节点安装所需依赖(如 libsnappy、zlib),并预留 磁盘空间 与 NameNode 堆内存。
- 方案选择:
- HA 集群优先滚动升级(Rolling Upgrade),基本不停机;
- 非 HA 或无法滚动时采用停机升级。
- 建议在 测试环境演练 全流程并验证回滚预案。
二 停机升级步骤(非 HA 或允许维护窗口)
- 检查与停机:
- 查看状态:执行 hdfs dfsadmin -report;
- 安全停机:按序停止 SecondaryNameNode → DataNodes → NameNode(如使用 systemd 则执行相应服务停止)。
- 安装新版本:下载并解压 Apache Hadoop 新版本至目标目录(如 /usr/local/hadoop-3.x),更新 HADOOP_HOME/PATH 等环境变量。
- 迁移配置:将旧配置中关键项(如 fs.defaultFS、dfs.replication、dfs.namenode.name.dir、dfs.datanode.data.dir)合并到新版本配置,避免路径与端口不一致。
- 执行升级:
- 启动 NameNode 升级:执行 hdfs namenode -upgrade,并通过 hdfs dfsadmin -upgradeProgress 观察进度;
- 启动 JournalNode(若启用 QJM/共享编辑日志);
- 逐个启动 DataNode。
- 验证与收尾:
- 健康检查:hdfs dfsadmin -report、NameNode Web UI(默认 9870 端口)、简单读写测试;
- 确认无误后执行 hdfs dfsadmin -finalizeUpgrade 完成升级(此操作不可逆)。
三 滚动升级步骤(HA 集群,尽量不停机)
- 准备阶段:
- 在 Standby NameNode 执行:hdfs dfsadmin -rollingUpgrade prepare;
- 查询状态:hdfs dfsadmin -rollingUpgrade query,待返回 “Proceed with rolling upgrade” 再继续。
- 升级 NameNode:
- 在 Active NameNode 执行:hdfs dfsadmin -rollingUpgrade start;
- 按序升级 Standby → Active(通过 hdfs haadmin -failover 切换),确保切换后原 Active 完成升级并作为 Standby 重启。
- 升级 DataNode:
- 按机架/批次滚动升级,逐台执行:
- 优雅关闭:hdfs dfsadmin -shutdownDatanode <dn_host>:<ipc_port> upgrade;
- 启动新版本:hadoop-daemon.sh start datanode(会自动完成数据目录升级)。
- 完成与回滚:
- 全部节点升级并验证后执行:hdfs dfsadmin -rollingUpgrade finalize(不可逆);
- 若异常,按预案回滚:hdfs dfsadmin -rollingUpgrade rollback,并使用旧版本二进制重启集群。
四 升级后验证与回滚
- 功能与性能验证:
- 基础命令:hdfs dfs -ls /、hdfs dfs -put/get、hadoop jar hadoop-mapreduce-examples.jar wordcount;
- 监控指标:hdfs dfsadmin -report、NameNode Web UI(:9870)、DataNode 日志、块报告与缺失块;
- 上下游兼容性:验证 Hive/Spark/Flink 等组件读写正常。
- 常见问题处理:
- 配置路径/权限不一致导致启动失败;
- 依赖库缺失(如 libsnappy、zlib)导致 DataNode/NameNode 异常;
- 升级后 副本数不足 或 块丢失,需结合 dfs.replication 与修复工具处理。
- 回滚要点:
- 滚动升级回滚:使用 -rollingUpgrade rollback 并重启旧版本;
- 停机升级回滚:NameNode 以 -rollback 启动恢复旧元数据;
- 回滚前确保 未执行 finalizeUpgrade,并保留旧版本安装与配置。