3月份,公司最大的集群要从Hadoop2.4升级到Hadoop2.8 ,是一个大版本跨度的升级操作,所以前期对Hadoop2.8版本进行了很多功能和性能方面的验证和测试。同时也拟定了几个升级和回滚方案。由于集群的离线任务一般在夜间,所以夜间的HDFS压力很大,RPC延迟很高,导致集群性能下降,最终升级是在这种集群快要支撑不住的情况下进行的。当然,升级过程还算比较平稳,没有出现什么惊心动魄的事情。
我们预定的方案是将集群先升级到过渡版本,再升级到最终版本。最终版本不可回滚到原先的2.4版本,但过渡版本可以很容易的回滚。
hadoop-2.8.2.1是过渡版本,此版本支持降级,但是2.8.2的新功能不能使用。使用此版本升级的时候,不需要执行hdfs RollingUpgrade相关的命令;但是需要设置参数
dfs.namenode.duringRollingUpgrade.enable=true
hadoop-2.8.2.2是最终版本,该版本不支持降级,但是要使用2.8.2的新功能,需要使用HDFS rollingUpgrade相关的命令进行升级。(我们这次只升级HDFS组件,不升级yarn组件,我们两个基础组件是分开用户起的服务,所以对yarn没有影响)
这个主要分三步
下面就大概说一下操作步骤
首先将软件包准备好,放到相应目录下
再将原来2.4版本的配置文件全部拷贝到新版本的目录下
rm -r ~/software/hadoop-2.8.2.1/etc/hadoop && scp -r ~/software/hadoop/etc/hadoop ~/software/hadoop-2.8.2.1/etc/
修改hadoop2.8.2.1 的配置文件
在hdfs-site.xml增加配置
检查namenode HA的状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
hadoop-daemon.sh stop zkfc
hadoop-daemon.sh stop namenode
cd ~/software && rm hadoop && ln -s hadoop-2.8.2.1 hadoop
检查是否软链正常
ls -trl
hadoop-daemon.sh start namenode
hadoop-daemon.sh start zkfc
正常启动之后,做相关检查
检查项
1、hdfs haadmin -getServiceState nn2 是否为standby
2、检查WebUI startupprogress 等待safe mode 退出
3、standby功能进行全面验证(1-2天)
hdfs haadmin -failover nn1 nn2
检查项3、standby功能进行全面验证(1-2天)
以上过程全部完成,并且验证通过后,过渡版本就算升级完成
与前面一样,先把hadoop2.8.2.2版本的软件包下载到机器上相应目录
然后把2.8.2.1中的配置文件拷贝过去
rm -r ~/software/hadoop-2.8.2.2/etc/hadoop && scp -r ~/software/hadoop/etc/hadoop ~/software/hadoop-2.8.2.2/etc/
修改hdfs-site.xml 相关参数配置
因为需要采用hdfs RollingUpgrade相关的命令,所以将这个参数设置为false
检查两个namenodeHA状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
执行命令 hdfs dfsadmin -rollingUpgrade prepare
进入目录 cd ~/hadoop/namenode/current(namenode元数据文件所在目录即fsimage和editlog的目录)
等待两分钟,查看是否目录中有 fsimage_rollback_xxxx.md5 文件生成
确认文件生成之后,执行命令 hdfs dfsadmin -rollingUpgrade query 查看升级状态
手动备份 fsimage
mkdir -p /data01/hdfs/backup/namenode
cp -r ~/hadoop/namenode/current /data01/hdfs/backup/namenode (注意提前计算空间,不要备份的时候空间不够)
停止进程,改软链
hadoop-daemon.sh stop zkfc
hadoop-daemon.sh stop namenode
cd ~/software && rm hadoop && ln -s hadoop-2.8.2.2 hadoop
因为最终版本的layoutVersion发生变化,所以必须需要此命令来升级namenode
hadoop-daemon.sh start namenode -rollingUpgrade started
hadoop-daemon.sh start zkfc
检查
1、hdfs haadmin -getServiceState nn2 是否为standby
2、检查WebUI 等待safe mode 退出,等待半小时后没有问题,就继续操作。