本文档风哥主要介绍Hadoop集群版本升级,包括升级方法、兼容性检查、回滚操作等内容,风哥教程参考Hadoop官方文档Upgrade等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 版本升级概述
Hadoop集群版本升级是运维工作的重要内容,需要确保升级过程平稳和数据安全。学习交流加群风哥微信: itpux-com
- 兼容性检查:确保版本兼容
- 数据备份:备份关键数据
- 升级测试:充分测试验证
- 回滚准备:准备回滚方案
版本升级是保持集群安全和功能更新的重要手段,
需要谨慎规划和执行。
主要目标:
1. 安全更新
– 修复安全漏洞
– 提升安全性
– 合规要求
2. 功能更新
– 新功能支持
– 性能优化
– Bug修复
3. 技术演进
– 版本迭代
– 架构升级
– 技术栈更新
# 升级场景
场景 描述 频率
安全补丁 修复安全漏洞 高
小版本升级 功能更新和Bug修复 中
大版本升级 重大版本变更 低
组件升级 生态组件版本更新 中
# Hadoop版本演进
版本 发布时间 主要特性
Hadoop 2.x 2013 YARN、HDFS HA
Hadoop 3.1 2018 纠删码、默认端口变更
Hadoop 3.2 2019 NameNode服务级别视图
Hadoop 3.3 2020 性能优化、Bug修复
Hadoop 3.4 2024 持续改进
# 升级风险
风险类型 影响 应对措施
数据丢失 严重 数据备份
服务中断 高 滚动升级
兼容性问题 高 充分测试
性能下降 中 性能测试
配置错误 中 配置检查
# 升级原则
1. 安全第一
确保数据安全,做好备份
2. 充分测试
在测试环境充分验证
3. 最小影响
选择合适时间窗口
4. 可回滚
保留回滚能力
5. 文档记录
详细记录升级过程
1.2 升级类型介绍
升级类型介绍:
1. 小版本升级
示例: 3.3.4 -> 3.3.6
特点:
– 兼容性好
– 风险较低
– 通常是Bug修复
2. 中版本升级
示例: 3.2.x -> 3.3.x
特点:
– 新功能引入
– 需要兼容性检查
– 可能有配置变更
3. 大版本升级
示例: 2.x -> 3.x
特点:
– 重大变更
– 需要全面测试
– 可能有数据格式变更
# 按升级方式分类
1. 停机升级
流程:
1. 停止所有服务
2. 备份数据
3. 升级软件
4. 启动服务
5. 验证功能
优点: 简单直接
缺点: 需要停机
2. 滚动升级
流程:
1. 升级一个节点
2. 验证功能
3. 逐个升级其他节点
优点: 最小化停机
缺点: 过程复杂
3. 蓝绿升级
流程:
1. 部署新版本集群
2. 同步数据
3. 切换流量
优点: 零停机
缺点: 资源消耗大
# 升级类型选择
因素 停机升级 滚动升级 蓝绿升级
停机时间 长 短 无
资源消耗 低 低 高
实现复杂度 低 中 高
风险 中 低 低
适用场景 小集群 大集群 关键业务
# HDFS升级类型
1. 滚动升级
特点: 不停机升级
要求: Hadoop 2.4+
2. 非滚动升级
特点: 需要停机
适用: 早期版本
# YARN升级类型
1. 滚动升级
特点: 逐个升级NodeManager
2. 非滚动升级
特点: 整体升级
1.3 升级策略介绍
升级策略介绍:
1. 升级前准备
任务:
– 版本兼容性检查
– 数据备份
– 配置备份
– 升级测试
2. 升级实施
任务:
– 选择升级时间窗口
– 执行升级操作
– 监控升级过程
– 处理异常情况
3. 升级后验证
任务:
– 功能验证
– 性能验证
– 数据验证
– 业务验证
# 兼容性检查
1. HDFS兼容性
检查项:
– 存储格式兼容
– 元数据版本
– 客户端协议
2. YARN兼容性
检查项:
– 调度器配置
– 容器配置
– 应用兼容性
3. 生态组件兼容性
检查项:
– Hive版本
– HBase版本
– Spark版本
# 回滚策略
1. 元数据回滚
方法: 恢复NameNode元数据
2. 软件回滚
方法: 回退到旧版本软件
3. 数据回滚
方法: 恢复数据备份
# 升级检查清单
检查项 状态
版本兼容性检查 [ ]
数据备份完成 [ ]
配置备份完成 [ ]
升级测试通过 [ ]
回滚方案准备 [ ]
升级时间窗口确认 [ ]
相关人员通知 [ ]
监控告警配置 [ ]
Part02-生产环境规划与建议
2.1 环境规划建议
环境规划建议:
项目 要求
集群规模 与生产环境相似
数据量 生产数据子集
测试场景 覆盖主要功能
# 升级时间窗口
阶段 时间
升级准备 1-2天
升级测试 3-5天
生产升级 根据集群规模
验证观察 1-2周
# 备份规划
备份内容 备份方式 保留时间
NameNode元数据 fsimage 永久
配置文件 文件备份 永久
业务数据 快照/备份 1个月
# 人员安排
角色 职责
升级负责人 整体协调
技术专家 技术支持
运维人员 执行操作
业务人员 业务验证
2.2 兼容性规划建议
兼容性规划建议:
版本 兼容性说明
Hadoop 2.x -> 3.x 需要数据迁移
Hadoop 3.1 -> 3.2 直接升级
Hadoop 3.2 -> 3.3 直接升级
Hadoop 3.3 -> 3.4 直接升级
# 生态组件兼容性
组件 Hadoop 3.3兼容版本
Hive 3.1.x
HBase 2.4.x
Spark 3.x
Sqoop 1.4.x
Flume 1.9.x
# 客户端兼容性
客户端类型 兼容性要求
Java客户端 需要更新依赖
Python客户端 需要更新库
命令行工具 需要更新版本
# 兼容性测试
测试项 测试内容
功能测试 主要功能正常
性能测试 性能无明显下降
兼容性测试 客户端兼容
压力测试 高负载稳定
2.3 回滚规划建议
回滚规划建议:
场景 回滚方式
升级失败 软件回滚
数据问题 数据恢复
性能问题 版本回退
兼容性问题 全面回滚
# 回滚步骤
1. 停止新版本服务
2. 恢复配置文件
3. 恢复元数据
4. 启动旧版本服务
5. 验证服务正常
# 回滚时间要求
场景 回滚时间
软件问题 30分钟
数据问题 2小时
全面回滚 4小时
# 回滚验证
验证项 验证内容
服务状态 服务正常运行
数据完整性 数据无丢失
业务功能 业务正常
Part03-生产环境项目实施方案
3.1 HDFS升级实战
# 检查当前版本
$ hdfs version
Hadoop 3.3.4
# 备份配置文件
$ cp -r /bigdata/app/hadoop/etc/hadoop /backup/hadoop_configs_$(date +%Y%m%d)
# 备份NameNode元数据
$ hdfs dfsadmin -fetchImage /backup/fsimage_$(date +%Y%m%d)
# 检查HDFS健康状态
$ hdfs fsck /
# 2. 滚动升级HDFS
# 步骤1: 准备升级
$ hdfs dfsadmin -rollingUpgrade prepare
# 查看升级状态
$ hdfs dfsadmin -rollingUpgrade query
# 步骤2: 升级NameNode
# 停止NameNode
$ hdfs –daemon stop namenode
# 解压新版本
$ tar -xzf hadoop-3.3.6.tar.gz -C /bigdata/app/
# 更新软链接
$ rm /bigdata/app/hadoop
$ ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop
# 复制配置文件
$ cp -r /backup/hadoop_configs_*/* /bigdata/app/hadoop/etc/hadoop/
# 启动NameNode
$ hdfs –daemon start namenode
# 查看日志
$ tail -f /bigdata/app/hadoop/logs/hadoop-*-namenode-*.log
# 步骤3: 升级DataNode(逐个)
$ for node in fgedu-node3 fgedu-node4 fgedu-node5; do
echo “升级 $node DataNode…”
ssh $node “hdfs –daemon stop datanode”
ssh $node “rm /bigdata/app/hadoop && ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop”
ssh $node “hdfs –daemon start datanode”
sleep 60
done
# 步骤4: 完成升级
$ hdfs dfsadmin -rollingUpgrade finalize
# 3. 验证升级
# 检查版本
$ hdfs version
Hadoop 3.3.6
# 检查服务状态
$ hdfs dfsadmin -report
# 检查数据完整性
$ hdfs fsck /
# 测试读写
$ hdfs dfs -mkdir -p /test/upgrade
$ hdfs dfs -put /etc/hosts /test/upgrade/
$ hdfs dfs -cat /test/upgrade/hosts
$ hdfs dfs -rm -r /test/upgrade
3.2 YARN升级实战
# 检查当前版本
$ yarn version
Hadoop 3.3.4
# 备份配置
$ cp /bigdata/app/hadoop/etc/hadoop/yarn-site.xml /backup/
# 检查运行中的应用
$ yarn application -list -appStates RUNNING
# 2. 滚动升级YARN
# 步骤1: 升级ResourceManager
# 停止RM
$ yarn –daemon stop resourcemanager
# 更新软件(已在HDFS升级时完成)
# 启动RM
$ yarn –daemon start resourcemanager
# 查看日志
$ tail -f /bigdata/app/hadoop/logs/yarn-*-resourcemanager-*.log
# 步骤2: 升级NodeManager(逐个)
$ for node in fgedu-node3 fgedu-node4 fgedu-node5; do
echo “升级 $node NodeManager…”
ssh $node “yarn –daemon stop nodemanager”
ssh $node “yarn –daemon start nodemanager”
sleep 30
done
# 3. 验证升级
# 检查版本
$ yarn version
Hadoop 3.3.6
# 检查节点状态
$ yarn node -list
Total Nodes:3
Node-Id Node-State Node-Http-Address Running-Containers
fgedu-node3:8041 RUNNING fgedu-node3:8042 0
fgedu-node4:8041 RUNNING fgedu-node4:8042 0
fgedu-node5:8041 RUNNING fgedu-node5:8042 0
# 测试提交作业
$ yarn jar /bigdata/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 2 10
Number of Maps = 2
Samples per Map = 10
…
Job Finished in 30.123 seconds
Estimated value of Pi is 3.1400000000
3.3 HA升级实战
# 检查HA状态
$ hdfs haadmin -getAllServiceState
fgedu-node1:9000 active
fgedu-node2:9000 standby
# 2. 升级HA NameNode
# 步骤1: 升级Standby NameNode
$ ssh fgedu-node2 “hdfs –daemon stop namenode”
$ ssh fgedu-node2 “rm /bigdata/app/hadoop && ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop”
$ ssh fgedu-node2 “hdfs –daemon start namenode”
# 步骤2: 切换Active
$ hdfs haadmin -failover fgedu-node1 fgedu-node2
# 步骤3: 升级原Active NameNode
$ ssh fgedu-node1 “hdfs –daemon stop namenode”
$ ssh fgedu-node1 “rm /bigdata/app/hadoop && ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop”
$ ssh fgedu-node1 “hdfs –daemon start namenode”
# 步骤4: 验证HA
$ hdfs haadmin -getAllServiceState
fgedu-node1:9000 standby
fgedu-node2:9000 active
# 3. 升级ResourceManager HA
# 步骤1: 升级Standby RM
$ ssh fgedu-node2 “yarn –daemon stop resourcemanager”
$ ssh fgedu-node2 “yarn –daemon start resourcemanager”
# 步骤2: 切换Active
$ yarn rmadmin -transitionToActive rm2
# 步骤3: 升级原Active RM
$ ssh fgedu-node1 “yarn –daemon stop resourcemanager”
$ ssh fgedu-node1 “yarn –daemon start resourcemanager”
# 步骤4: 验证RM HA
$ yarn rmadmin -getServiceState rm1
standby
$ yarn rmadmin -getServiceState rm2
active
Part04-生产案例与实战讲解
4.1 版本升级案例
# 1. 升级背景
– 当前版本: Hadoop 3.3.4
– 目标版本: Hadoop 3.3.6
– 升级原因: 安全补丁和Bug修复
– 集群规模: 10节点
# 2. 升级准备
# 下载新版本
$ wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
# 解压到所有节点
$ for node in fgedu-node{1..10}; do
scp hadoop-3.3.6.tar.gz $node:/tmp/
ssh $node “tar -xzf /tmp/hadoop-3.3.6.tar.gz -C /bigdata/app/”
done
# 备份配置
$ cp -r /bigdata/app/hadoop/etc/hadoop /backup/hadoop_configs_20260408
# 备份元数据
$ hdfs dfsadmin -fetchImage /backup/fsimage_20260408
# 3. 执行升级
# 准备滚动升级
$ hdfs dfsadmin -rollingUpgrade prepare
# 升级NameNode
$ hdfs –daemon stop namenode
$ rm /bigdata/app/hadoop
$ ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop
$ cp -r /backup/hadoop_configs_20260408/* /bigdata/app/hadoop/etc/hadoop/
$ hdfs –daemon start namenode
# 升级DataNode(滚动)
$ for node in fgedu-node{3..10}; do
echo “升级 $node…”
ssh $node “hdfs –daemon stop datanode”
ssh $node “rm /bigdata/app/hadoop && ln -s /bigdata/app/hadoop-3.3.6 /bigdata/app/hadoop”
ssh $node “hdfs –daemon start datanode”
sleep 120
done
# 升级YARN
$ yarn –daemon stop resourcemanager
$ yarn –daemon start resourcemanager
$ for node in fgedu-node{3..10}; do
ssh $node “yarn –daemon stop nodemanager”
ssh $node “yarn –daemon start nodemanager”
sleep 60
done
# 完成升级
$ hdfs dfsadmin -rollingUpgrade finalize
# 4. 验证结果
$ hdfs version
Hadoop 3.3.6
$ hdfs dfsadmin -report | grep “Live datanodes”
Live datanodes (8):
$ yarn node -list | wc -l
9
4.2 回滚操作案例
# 1. 回滚场景
升级后发现问题:
– 性能下降明显
– 部分功能异常
# 2. 回滚步骤
# 步骤1: 停止服务
$ stop-dfs.sh
$ stop-yarn.sh
# 步骤2: 恢复软件版本
$ rm /bigdata/app/hadoop
$ ln -s /bigdata/app/hadoop-3.3.4 /bigdata/app/hadoop
# 步骤3: 恢复配置
$ cp -r /backup/hadoop_configs_20260408/* /bigdata/app/hadoop/etc/hadoop/
# 步骤4: 恢复元数据(如果需要)
$ hdfs namenode -recover -force
# 步骤5: 启动服务
$ start-dfs.sh
$ start-yarn.sh
# 步骤6: 验证回滚
$ hdfs version
Hadoop 3.3.4
$ hdfs fsck /
……….Status: HEALTHY
# 3. 回滚后处理
– 分析升级失败原因
– 修复问题后重新升级
– 更新升级文档
4.3 常见问题处理
4.3.1 升级后服务无法启动
# 排查步骤
# 1. 查看日志
$ tail -100 /bigdata/app/hadoop/logs/hadoop-*-namenode-*.log
# 2. 检查配置
$ diff /backup/hadoop_configs_*/* /bigdata/app/hadoop/etc/hadoop/
# 3. 检查权限
$ ls -la /bigdata/app/hadoop/etc/hadoop/
# 常见原因
– 配置文件缺失或错误
– 权限问题
– 端口冲突
– 依赖缺失
4.3.2 数据不兼容
# 排查步骤
# 1. 检查元数据版本
$ hdfs oiv -p XML -i /bigdata/fgdata/current/fsimage_*
# 2. 检查数据格式
$ hdfs fsck / -files -blocks
# 解决方案
– 使用兼容版本
– 数据迁移转换
– 回滚到旧版本
Part05-风哥经验总结与分享
5.1 版本升级最佳实践
版本升级最佳实践建议:
1. 充分测试验证
2. 做好数据备份
3. 使用滚动升级
4. 准备回滚方案
5. 详细记录过程
5.2 使用建议
使用建议:
- 升级前充分测试
- 升级中监控进度
- 升级后验证功能
- 保留回滚能力
5.3 工具推荐
版本升级工具推荐:
- Ansible:自动化升级
- 监控工具:升级监控
- 备份工具:数据备份
- 验证脚本:功能验证
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
