升级前必须对HDFS关键数据进行备份(如/path/to/namenode/meta、/path/to/datanode/data等目录),并对当前Hadoop配置文件(core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml)及环境变量(/etc/profile中HADOOP_HOME等设置)进行完整备份,防止升级过程中数据丢失或配置错误。
查阅目标版本的官方升级文档(如Apache Hadoop官网的UPGRADE.txt),确认新版本与现有集群的操作系统(如CentOS 7/8)、依赖项(如Java版本,通常要求Java 8或11)、Hadoop组件(如YARN、MapReduce)的兼容性,避免因版本不匹配导致升级失败。
从Apache Hadoop官方网站下载目标版本的安装包(如hadoop-3.4.0.tar.gz),上传至Linux服务器并解压至指定目录(如/opt/hadoop),避免覆盖旧版本文件(可重命名为hadoop-3.4.0)。
升级前需停止所有HDFS相关服务,避免服务冲突。根据系统服务管理工具选择对应命令:
sudo systemctl stop hadoop-hdfs-namenode  # 停止NameNode
sudo systemctl stop hadoop-hdfs-datanode  # 停止DataNode
./bin/stop-dfs.sh  # 停止所有HDFS服务
停止后,通过jps命令确认NameNode、DataNode进程已终止。
将解压后的新版本Hadoop目录移动至目标路径(如/opt/hadoop),并更新环境变量:
# 移动新版本目录(示例)
mv /opt/hadoop-3.4.0 /opt/hadoop
# 更新环境变量(若未配置)
echo "export HADOOP_HOME=/opt/hadoop" >> /etc/profile
echo "export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile
source /etc/profile  # 生效环境变量
确保HADOOP_HOME指向新版本目录,且PATH包含新版本的bin和sbin目录。
根据新版本的配置变更说明(如hadoop-3.x.x/CHANGELOG.txt),调整新版本目录下的配置文件(如core-site.xml、hdfs-site.xml):
dfs.namenode.name.dir、dfs.datanode.data.dir),需更新为新路径;dfs.namenode.rpc-address),需补充配置;dfs.permissions.enabled),需删除或注释。滚动升级是HDFS推荐的升级方式,可最小化服务中断。步骤如下:
准备滚动升级:在Standby NameNode(HA集群)或Active NameNode(非HA集群)上执行:
hdfs dfsadmin -rollingUpgrade prepare
检查升级状态:
hdfs dfsadmin -rollingUpgrade query
若返回Proceed with rolling upgrade,则可继续下一步。
启动滚动升级:在Active NameNode上执行:
hdfs dfsadmin -rollingUpgrade start
此时NameNode会进入滚动升级模式,后续可逐个升级DataNode。
升级DataNode:逐个停止并重启DataNode节点,使新版本生效:
# 在目标DataNode上执行
hdfs dfsadmin -shutdownDatanode <datanode_host>:<ipc_port> upgrade  # 关闭DataNode
hdfs --daemon start datanode  # 启动DataNode(使用新版本)
重复上述步骤,直到所有DataNode均升级完成。
升级完成后,通过以下命令验证集群状态:
查看集群报告:
hdfs dfsadmin -report
确认所有节点(NameNode、DataNode)的状态为live,且版本号显示为目标版本。
检查Web界面:访问NameNode的Web界面(如http://<namenode_host>:9870),确认集群版本、节点状态及存储信息正常。
运行测试任务:提交简单的MapReduce或Spark任务,验证数据处理功能是否正常。
若升级后运行稳定,可执行最终升级命令,清理旧版本数据(此操作不可逆):
hdfs dfsadmin -rollingUpgrade finalize
执行后,集群将完全切换至新版本,无法再回滚到旧版本。
若升级过程中出现数据不一致、服务无法启动等问题,需立即执行回滚:
停止HDFS服务:
sudo systemctl stop hadoop-hdfs-namenode
sudo systemctl stop hadoop-hdfs-datanode
回滚NameNode:
hdfs namenode -rollback  # 回滚NameNode到旧版本
回滚DataNode:
hdfs datanode -rollback  # 回滚DataNode到旧版本
重启服务:
sudo systemctl start hadoop-hdfs-namenode
sudo systemctl start hadoop-hdfs-datanode
回滚后,集群将恢复至升级前的状态。
注意事项:
/var/log/hadoop-hdfs/),及时定位错误;NameNode元数据。