怎樣更新Ubuntu上的Hadoop版本
更新Ubuntu系統上的Hadoop版本需遵循謹慎操作原則,優先采用滾動升級(Rolling Upgrade)方式,確保集群服務不中斷且數據不丟失。以下是詳細步驟:
備份關鍵數據與配置
備份HDFS元數據(fsimage
、edits
文件,位于dfs.namenode.name.dir
目錄)和所有配置文件(core-site.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
等),建議備份到本地或遠程存儲(如NFS)。同時確認集群狀態健康:
hdfs dfsadmin -report # 查看所有DataNode是否正常
yarn node -list # 查看所有NodeManager是否正常
檢查版本兼容性
閱讀新版本Hadoop的官方升級指南(如從2.x升級到3.x),確認新版本與當前版本的兼容性(如HDFS文件格式、YARN資源配置等),重點關注不兼容的配置項變更(如3.x中dfs.replication
默認值仍為3,但部分參數名稱可能調整)。
準備新版本安裝包
從Hadoop官方網站(https://hadoop.apache.org/releases.html)下載目標版本的二進制壓縮包(如hadoop-3.3.6.tar.gz
),避免使用源碼包(需自行編譯,增加復雜度)。
在升級前,需逐個停止集群中的所有服務(從DataNode到NameNode,從NodeManager到ResourceManager),避免服務沖突:
# 停止YARN服務
yarn --daemon stop resourcemanager
yarn --daemon stop nodemanager
# 停止HDFS服務
hdfs --daemon stop datanode
hdfs --daemon stop namenode
解壓新版本安裝包
將下載的安裝包解壓到專用目錄(如/usr/local
),避免與舊版本目錄混淆:
sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
sudo mv /usr/local/hadoop-3.3.6 /usr/local/hadoop-new # 重命名為新版本標識
更新環境變量
修改全局環境變量配置文件(如/etc/profile
),將HADOOP_HOME
指向新版本目錄,并更新PATH
變量:
sudo vim /etc/profile
在文件末尾添加:
export HADOOP_HOME=/usr/local/hadoop-new
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # 確保指向新版本的配置目錄
生效配置:
source /etc/profile
驗證環境變量:
hadoop version # 應顯示新版本信息(如Hadoop 3.3.6)
合并配置文件
將舊版本$HADOOP_HOME/etc/hadoop
目錄下的自定義配置文件(如core-site.xml
、hdfs-site.xml
)復制到新版本的配置目錄,覆蓋同名文件:
cp -r /usr/local/hadoop-old/etc/hadoop/* /usr/local/hadoop-new/etc/hadoop/
重點檢查:
dfs.namenode.handler.count
在3.x中改為dfs.namenode.handler.count
,默認值可能調整);dfs.datanode.data.dir
需明確指定數據目錄)。調整數據目錄權限
確保新版本的dfs.namenode.name.dir
(NameNode元數據目錄)和dfs.datanode.data.dir
(DataNode數據目錄)存在且具備正確權限(屬主為hadoop
用戶,權限為755
):
sudo mkdir -p /path/to/namenode/dir /path/to/datanode/dir # 若目錄不存在則創建
sudo chown -R hadoop:hadoop /path/to/namenode/dir /path/to/datanode/dir
滾動升級需先升級NameNode,再逐個升級DataNode,確保HDFS服務不中斷:
升級NameNode
停止舊版本NameNode,使用新版本啟動并進入升級模式:
hdfs --daemon stop namenode # 停止舊NameNode
$HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade # 啟動新NameNode并升級
查看升級進度:
hdfs dfsadmin -upgradeProgress status # 應顯示“Upgrading”狀態
升級DataNode
逐個停止舊版本DataNode,使用新版本啟動(每次僅升級一個DataNode,避免集群不可用):
hdfs --daemon stop datanode # 在目標DataNode上停止舊服務
$HADOOP_HOME/bin/hdfs --daemon start datanode # 啟動新服務
重復此步驟,直到所有DataNode均升級完成。
完成HDFS升級
確認所有DataNode升級成功后,提交升級(清理舊版本元數據):
hdfs dfsadmin -finalizeUpgrade
若新版本Hadoop包含YARN組件升級,需先升級ResourceManager,再逐個升級NodeManager:
升級ResourceManager
停止舊版本ResourceManager,使用新版本啟動:
yarn --daemon stop resourcemanager # 停止舊ResourceManager
$HADOOP_HOME/bin/yarn --daemon start resourcemanager # 啟動新ResourceManager
升級NodeManager
逐個停止舊版本NodeManager,使用新版本啟動:
yarn --daemon stop nodemanager # 在目標NodeManager上停止舊服務
$HADOOP_HOME/bin/yarn --daemon start nodemanager # 啟動新服務
檢查服務狀態
使用jps
命令查看所有必需的守護進程是否正常運行:
jps
正常應顯示:NameNode
、DataNode
、ResourceManager
、NodeManager
等進程。
運行測試任務
提交一個簡單的MapReduce任務(如wordcount
),驗證新版本功能是否正常:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output
檢查輸出目錄/output
中的結果文件,確認任務執行成功。
查看集群狀態
使用Hadoop命令查看集群信息,確認版本已更新:
hdfs dfsadmin -report # 查看HDFS集群狀態
yarn node -list # 查看YARN集群狀態
若升級成功且運行穩定,可清理舊版本Hadoop的安裝目錄(如/usr/local/hadoop-old
),釋放磁盤空間:
sudo rm -rf /usr/local/hadoop-old
-rollback
命令回滾到舊版本(如hdfs dfsadmin -rollback
),但需在升級前確認舊版本數據未被清理。