最近对hdfs的升级过程很感兴趣,所以准备研究下其升级的过程,本篇文章是依据官网文档进行的升级过程(地址:Apache Hadoop 2.10.2 – HDFS Rolling Upgrade),该文章中还有关于降低的介绍,感兴趣的可以自行查阅验证。
1)hdfs升级有两种,一种是停机升级,一种是滚动升级。滚动升级允许datanode、namenode等组件各自独立的升级,且不用停止hdfs服务;
2)滚动升级的前提是集群是HA高可用模式;
3)滚动升级从hadoop2.4.0开始支持;
4)滚动升级一般是升级namenode和datanode,journalnode和zkfc相对稳定,一般不升级,如果升级可能会导致集群下线。
HA高可用集群一套,我这里用的版本是2.10.1;
准备升级的新版本安装包一个,我这里用的是3.2.4版本;
1)备份镜像fsimage
hdfs dfsadmin -rollingUpgrade prepare
2)查询备份进度
hdfs dfsadmin -rollingUpgrade query
出现“Proceed with rolling upgrade”表示fsimage创建成功
3)拷贝2.10.1中的关键配置到3.2.4安装包中,并分发安装包到所有节点
core-site.xml、hdfs-site.xml、hadoop-env.sh
修改/etc/profile中环境变量,指向最新的版本(如果还是指向老版本,即使用全路径命令,还是会影响新版本的命令执行):
首先升级standby节点,因为我本地nn1是active,所以先升级nn2,升级流程如下:
kill -9
hdfs --daemon start namenode -rollingUpgrade started
此时到web页面也可观察到nn2节点的版本已经升级到了3.2.4版本
其次将nn2转换为active状态后重启nn1:
我这里本来向用failover强制转换active和stanby状态,但是没成功,于是就主动杀死当前namenode进程,以此达到nn2由standby转换为active的过程,注意这里不要刚杀死nn1的namenode进程就重启,最好在nn2上执行hdfs haadmin -getServiceState nn2确认nn2已经转换为active状态,再升级重启nn1上的namenode进程。
至此,namenode的升级已经完成。接下来我们看下datanode的升级过程。
推荐:datanode节点一个个关闭在重启升级,不要批量关闭和重启升级
首先执行如下指令关闭datanode节点:
hdfs dfsadmin -shutdownDatanode
其次执行如下指令或者jps指令查看datanode是否已经被关闭:
hdfs dfsadmin -getDatanodeInfo node1:50020
最后则是在对应的datanode节点重启datanode进程:
hdfs --daemon start datanode
datanode的升级我只贴了node1节点的图,其它节点过程类似就没贴。
执行如下命令确认升级结束
hdfs dfsadmin -rollingUpgrade finalize
可以看到namenode和datanode都运行正常,且版本升级为了3.2.4。而且web页面上的升级信息也自动消除调了。