阅读量:30
Ubuntu HDFS版本升级流程(以滚动升级为例,适用于Hadoop 2.x→3.x及以上版本)
一、升级前准备
-
数据与环境检查
- 备份关键数据:对HDFS上的重要数据(如
/user、/data等目录)进行全量备份(可使用hadoop fs -copyToLocal或第三方存储工具);备份NameNode元数据目录(默认$HADOOP_HOME/data/namenode)和DataNode数据目录(默认$HADOOP_HOME/data/datanode)。 - 检查兼容性:阅读新版本官方升级指南(如Apache Hadoop Release Notes),确认新版本与Ubuntu系统版本(如22.04/20.04)、Java版本(如OpenJDK 11/17)、依赖组件(如YARN、Hive、Spark)的兼容性。
- 测试环境验证:在非生产环境的测试集群中完整模拟升级流程,确认新版本功能正常且无兼容性问题。
- 备份关键数据:对HDFS上的重要数据(如
-
停止HDFS服务
- 在所有节点(NameNode、Standby NameNode、DataNode)上停止HDFS服务:
$HADOOP_HOME/sbin/stop-dfs.sh - 使用
jps命令确认NameNode、DataNode进程已完全停止。
- 在所有节点(NameNode、Standby NameNode、DataNode)上停止HDFS服务:
二、执行滚动升级(HA集群推荐)
滚动升级通过逐步替换节点版本,实现集群无停机升级,适用于生产环境。
1. 准备滚动升级
- 在Standby NameNode上执行以下命令,创建用于回滚的fsimage文件:
hdfs dfsadmin -rollingUpgrade prepare - 检查升级准备状态,直到返回
Proceed with rolling upgrade(表示可继续升级):hdfs dfsadmin -rollingUpgrade query
2. 启动滚动升级
- 在Active NameNode上执行以下命令,正式启动滚动升级:
hdfs dfsadmin -rollingUpgrade start
3. 逐个升级DataNode
- 登录每个DataNode节点,依次执行以下命令(每次处理1-2个节点,避免集群负载过高):
- 关闭DataNode(触发升级模式):
hdfs dfsadmin -shutdownDatanode: upgrade - 等待DataNode进程完全停止(可通过
jps或$HADOOP_HOME/logs/datanode.log确认)。 - 启动升级后的DataNode:
$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode - 检查DataNode状态(应显示为新版本):
hdfs dfsadmin -report
- 关闭DataNode(触发升级模式):
4. 升级NameNode(若为HA集群)
- 若集群为HA模式,需将Standby NameNode切换为Active,升级原Active NameNode:
- 故障转移(将Standby切换为Active):
hdfs haadmin -failover - 在原Active NameNode(现为Standby)上执行:
hdfs dfsadmin -rollingUpgrade started - 启动升级后的NameNode:
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
- 故障转移(将Standby切换为Active):
5. 完成滚动升级
- 当所有DataNode和NameNode均升级完成后,执行以下命令清理旧版本元数据(不可逆操作,执行后无法回滚):
hdfs dfsadmin -rollingUpgrade finalize
三、验证升级结果
-
检查集群状态
- 使用
hdfs dfsadmin -report查看NameNode、DataNode的数量及状态(应均为live)。 - 访问NameNode Web界面(如
http://),确认集群版本显示为新版本。:9870
- 使用
-
测试功能
- 执行简单数据操作(如
hadoop fs -put /local/file /hdfs/path上传文件,hadoop fs -get /hdfs/path /local/dir下载文件)。 - 运行MapReduce测试任务(如
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples.jar wordcount /input /output),确认任务执行成功。
- 执行简单数据操作(如
四、回滚计划(可选但必须准备)
若升级后出现元数据损坏、服务无法启动等问题,需立即执行回滚:
-
停止集群
- 在所有节点上停止HDFS服务:
$HADOOP_HOME/sbin/stop-dfs.sh
- 在所有节点上停止HDFS服务:
-
回滚HDFS
- 执行回滚命令,恢复到升级前的元数据状态:
hdfs dfsadmin -rollingUpgrade rollback
- 执行回滚命令,恢复到升级前的元数据状态:
-
重启旧版本
- 使用旧版本的
start-dfs.sh脚本启动集群:$HADOOP_HOME/sbin/start-dfs.sh
- 使用旧版本的
-
验证回滚
- 确认集群状态恢复正常(
hdfs dfsadmin -report显示所有节点live),数据完整性未受影响。
- 确认集群状态恢复正常(
注意事项
- 版本兼容性:新版本可能调整文件系统布局(如Hadoop 3.x默认使用
Erasure Coding替代传统副本机制),需提前修改hdfs-site.xml配置(如dfs.replication改为dfs.erasurescoding.policy)。 - 日志监控:升级过程中密切关注
$HADOOP_HOME/logs下的NameNode、DataNode日志,及时处理ERROR或WARN级别的异常。 - 客户端配置:升级完成后,需将客户端节点的
core-site.xml、hdfs-site.xml更新为新版本路径,确保客户端能正常访问集群。