如果Hadoop集群配置了高可用,则可以进行不停服的滚动升级。但现在是伪分布的单节点集群,因此需要停止Hadoop及相关的应用,包括hbase、zookeeper等。
Hadoop升级
- 因为目前有跑flink作业,checkpoint是放在hdfs上的,因此先停掉对应的job(只需要停job,不用关flink集群)
- 停止hbase集群:stop-hbase.sh
- 停止Hadoop集群:stop-all.sh
- 备份hdfs元数据:包括namenode元数据、datanode元数据、临时数据,我都备份了。命令类似:
tar -zcvf /opt/backup/backup_namenode.tar.gz *
- 上传新版本Hadoop安装包,解压、配置(包括Hadoop配置文件,以及/etc/profile环境变量指向新版本)
- 新版本sbin目录下执行升级操作:./start-dfs.sh -upgrade
- 启动Hadoop集群:start-all.sh
3.1.3版本的hdfs web端口由50070改为了9870:
此时可以看到上面有一行说明,红框中的意思是正在升级。
等了10分钟左右还是这样,但我通过hdfs dfsadmin -report查看hdfs状态是正常的,且通过hdfs fsck -blocks查看块数据也没有丢失的,所以就直接输入如下命令来手动结束升级:
$ hdfs dfsadmin -finalizeUpgrade
Finalize upgrade successful
接下来进行hbase的升级
hbase升级
- 上传新版本hbase安装包,解压,修改配置(包括hbase的配置文件以及/etc/profile中的hbase路径)
- 将lib/client-facing-thirdparty下的两个htrace文件复制到lib下,不然启动hbase会报错org.apache.htrace.SamplerBuilder找不到
- 启动hbase,如果报错FanOutOneBlockAsyncDFSOutputHelper找不到,则需要在hbase-site.xml添加配置
<property>
<name>hbase.wal.provider</name>
<value>filesystem</value>
</property>
再次启动即可。(可能需要过一段时间hbase shell才能用,我看了日志,大概5分钟之后可用)
至此,Hadoop和hbase的伪分布模式升级完成。接下来把旧版本文件删掉即可。