HDFS 滾動升級允許升級個別 HDFS 程式。例如,資料節點可以獨立於名稱節點升級。名稱節點可以獨立於其他名稱節點升級。名稱節點可以獨立於資料節點和日誌節點升級。
在 Hadoop v2 中,HDFS 支援高可用性 (HA) 名稱節點服務和線路相容性。這兩個功能使升級 HDFS 時不會造成 HDFS 停機。為了在沒有停機時間的情況下升級 HDFS 叢集,必須使用 HA 設定叢集。
如果有任何新功能在新軟體版本中啟用,在升級後可能無法與舊軟體版本一起使用。在這種情況下,應按照下列步驟進行升級。
請注意,僅從 Hadoop-2.4.0 起支援滾動升級。
在 HA 叢集中,有兩個或更多個 名稱節點 (NN)、多個 資料節點 (DN)、幾個 日誌節點 (JN) 和幾個 ZooKeeper 節點 (ZKN)。JN 相對穩定,在大部分情況下升級 HDFS 時不需要升級。在此處描述的滾動升級程序中,僅考慮 NN 和 DN,但不考慮 JN 和 ZKN。升級 JN 和 ZKN 可能會導致叢集停機。
假設有兩個名稱節點 NN1 和 NN2,其中 NN1 和 NN2 分別處於活動和備用狀態。以下是升級 HA 叢集的步驟
hdfs dfsadmin -rollingUpgrade prepare
」以建立 fsimage 以供回滾。hdfs dfsadmin -rollingUpgrade query
」以檢查回滾映像的狀態。等待並重新執行此指令,直到顯示「Proceed with rolling upgrade
」訊息。-rollingUpgrade started
」選項將 NN2 作為備用啟動。-rollingUpgrade started
」選項將 NN1 作為備用啟動。hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
」以關閉所選資料節點之一。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
」以檢查並等待資料節點關閉。hdfs dfsadmin -rollingUpgrade finalize
」以完成滾動升級。在聯合叢集中,有許多命名空間,以及每個命名空間一對活動和備用 NN。升級聯合叢集的程序類似於升級非聯合叢集,但步驟 1 和步驟 4 會在每個命名空間上執行,而步驟 2 會在每對活動和備用 NN 上執行,即
對於非 HA 叢集,由於需要重新啟動名稱節點,因此不可能在沒有停機時間的情況下升級 HDFS。但是,資料節點仍可以滾動方式升級。
在非 HA 叢集中,有一個 名稱節點 (NN)、一個 次要名稱節點 (SNN) 和許多 資料節點 (DN)。升級非 HA 叢集的程序類似於升級 HA 叢集,但步驟 2「升級活動和備用 NN」會變更為以下內容
-rollingUpgrade started
」選項啟動 NN。如果升級的版本不理想,或者在某些不太可能的情況下,升級失敗(由於較新版本中的錯誤),管理員可能會選擇將 HDFS 降級回升級前的版本,或將 HDFS 回滾到升級前的版本和升級前的狀態。
請注意,降級可以滾動進行,但回滾不行。回滾需要叢集停機。
另請注意,只有在啟動滾動升級之後且在升級終止之前,才能進行降級和回滾。升級可以通過完成、降級或回滾終止。因此,在完成或降級之後可能無法執行回滾,或在完成之後執行降級。
降級會將軟體還原到升級前的版本,並保留使用者資料。假設時間 T 是滾動升級開始時間,且升級已透過降級終止。然後,在 T 之前或之後建立的檔案仍可在 HDFS 中使用。在 T 之前或之後刪除的檔案仍會在 HDFS 中保持刪除狀態。
較新版本只能在名稱節點佈局版本和資料節點佈局版本在這兩個版本之間未變更的情況下,降級到升級前的版本。
在 HA 集群中,當從舊軟體版本進行滾動升級到新軟體版本時,可以以滾動方式將已升級的機器降級回舊軟體版本。與之前相同,假設 NN1 和 NN2 分別處於活動和待命狀態。以下是無停機時間滾動降級的步驟
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> upgrade
」以關閉所選資料節點之一。hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
」以檢查並等待資料節點關閉。hdfs dfsadmin -rollingUpgrade finalize
」以完成滾動降級。請注意,必須在降級名稱節點之前降級資料節點,因為協定可能會以向後相容的方式變更,但不會向前相容,也就是說舊資料節點可以與新名稱節點通訊,但反之則不行。
回滾會將軟體還原到升級前的版本,但也會將使用者資料還原到升級前的狀態。假設時間 T 是滾動升級開始時間,而且升級已終止並回滾。在 T 之前建立的檔案仍可在 HDFS 中使用,但在 T 之後建立的檔案將無法使用。在 T 之前刪除的檔案仍會在 HDFS 中保持刪除狀態,但在 T 之後刪除的檔案會被還原。
從較新的版本回滾到升級前的版本始終受支援。但是,無法以滾動方式執行此操作。這需要群集停機。假設 NN1 和 NN2 分別處於活動和待命狀態。以下是回滾的步驟
-rollingUpgrade rollback
」選項啟動 NN1 作為活動。-rollback
」選項啟動 DN。dfsadmin -rollingUpgrade
hdfs dfsadmin -rollingUpgrade <query|prepare|finalize>
執行滾動升級動作。
query |
查詢目前的滾動升級狀態。 |
prepare |
準備新的滾動升級。 |
finalize |
完成目前的滾動升級。 |
dfsadmin -getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
取得給定資料節點的資訊。此指令可用於檢查資料節點是否存活,就像 Unix 的 ping
指令。
dfsadmin -shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
提交關閉給定資料節點的請求。如果指定了選用的 upgrade
參數,則會建議存取資料節點的用戶端等待其重新啟動,且會啟用快速啟動模式。如果重新啟動未及時發生,用戶端將會逾時並忽略資料節點。在這種情況下,快速啟動模式也會被停用。
請注意,此指令不會等待資料節點關閉完成。「dfsadmin -getDatanodeInfo
」指令可用於檢查資料節點關閉是否完成。
namenode -rollingUpgrade
hdfs namenode -rollingUpgrade <rollback|started>
當滾動升級正在進行中,-rollingUpgrade
namenode 啟動選項用於指定各種滾動升級選項。
rollback |
將 namenode 還原至升級前的版本,但也會將使用者資料還原至升級前的狀態。 |
started |
指定已啟動的滾動升級,以便 namenode 在啟動期間允許具有不同佈局版本的映像目錄。 |
警告:降級選項已過時。不需要明確使用降級選項來啟動 namenode。