如果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的僞分佈模式升級完成。接下來把舊版本文件刪掉即可。