HDFS Rolling Upgrade
HDFS 滾動升級允許單獨升級每一個HDFS程序。例如,DataNode可以獨立於NameNode升級。一個NameNode可以獨立於其他的NameNode升級。NameNode可以獨立於DataNode和JournalNode升級。
在Hadoop V2中,HDFS支援NameNode服務的HA和前後相容。這兩個能力使線上升級HDFS成為可能。為了線上升級一個HDFS叢集,叢集必須以HA安裝。
在HA的叢集中,有兩個或者更多的NameNode,很多DataNode,幾個JournalNode和幾個ZookeeperNode。JNs是相對穩定的,在大多數情況下,升級HDFS不需要升級JNs。這裡描述滾動升級的過程,只考慮NameNode和DataNode,不考慮JNs和ZKNs。升級JNs和ZKNs可能會引起停機時間。
Upgrading Non-Federated Clusters
假設有兩個NameNode NN1和NN2,NN1和NN2分別處在Active和Standby狀態。下面是升級一個HA叢集的步驟:
1. 準備滾動升級
2. 執行命令“hdfsdfsadmin -rollingUpgrade query”,檢查滾動Image的狀態。等一會接著重新執行這個命令直到“Proceed with rolling upgrade”訊息出現。
2 .升級Active和Standby NNs
1. 關閉NN2,然後升級NN2
3. 從NN1故障轉移到NN2,以使NN2處於Active,NN1處於Standby。
4. 關閉NN1,然後升級NN1。
3 . 升級DNs
1. 選擇一小部分DataNode(所有的DataNode都在一個特定的機架上)。
3. 升級和重新啟動DataNode
4. 在所有選中的機器上執行上邊的步驟,一次選中的DataNode可以並行操作。
2. 重新執行上邊的步驟直到叢集中的所有DataNode被升級。
4 . 結束滾動升級
Upgrade Federated Clusters
在聯邦的叢集中,有多個名稱空間,每一個名稱空間都有一對NN,一個Active,一個Standby。升級一個聯邦的叢集和升級一個非聯邦的叢集除了步驟1和步驟4需要執行在每一個名稱空間,步驟2執行在每一個NNs對之外,其餘是相同的。
1. 準備每一個名稱空間的滾動升級
2. 升級每一個名稱空間的Active和Standby NN。
3. 升級DNs。
4. 結束每一個名稱空間的滾動升級。
對於非HA的叢集,沒有停機時間升級HDFS是不可能的,因為升級需要重新啟動NameNode。但是,DataNode仍然可以以滾動的方式升級。
Upgrading Non-HA Clusters
在一個非HA的叢集中,只有一個NN,一個SNN和多個DN。升級一個非HA叢集與升級一個HA的叢集類似,除了步驟2,升級Active和Standby NN被改為下面這樣:
u 升級一個NN和SNN
1. 關閉SNN
2. 關閉和升級NN
4. 升級和重啟SNN
當升級後的版本不盡人意或者,在一些看似不太可能的情況下,升級失敗(因為新版本的bug),管理員可能選擇降級HDFS到之前的版本,或者回滾HDFS到升級之前的版本和升級之前的狀態。不管是降級還是回滾都需要叢集停機時間,不能以滾動的方式完成。
注意降級和滾回操作只能發生在滾動升級開始之後,升級結束之前。一次升級過程可被finalize或者downgrade或者rollback結束。因此,在finalize或者downgrade之後執行rollback是不可能的,在finalize之後執行downgrade也是不可能的。
Downgrade將軟體恢復到升級之前的版本同時儲存使用者資料。假設時間T是滾動升級的開始時間,升級被Downgrade結束。然後,在T之前或之後建立的檔案在HDFS中都可用。在T之前或之後刪除的檔案,就保持刪除。
如果NameNode的版本和DataNode的版本在兩個HDFS版本中沒有沒改,一個新版本可以降級到升級之前的版本。下面是降級的步驟:
u 降級HDFS
1. 關閉所有的NN和DN
2. 在所有的機器上恢復到升級之前的版本。
4. 正常啟動DN
Rollback恢復HDFS的狀態到升級之前的版本,但是會將使用者資料重置會升級之前的狀態。假設時間T是滾動升級的開始時間,升級被Rollback結束。在T之前建立的檔案被儲存,在T之後建立的檔案將變得不可用。在T之前刪除的檔案保持刪除,在T之後刪除的檔案會被恢復。
從一個新版本回滾回升級之前的狀態總是被支援的。下面是回滾的步驟:
u Rollback HDFS
1. 關閉所有的NN和DN
2. 恢復所有機器上升級之前的HDFS版本
4. 正常啟動DN
dfsadmin-rollingUpgrade
hdfs dfsadmin-rollingUpgrade <query|start|finalize>
執行滾動升級操作
u 選項
query |
Query the current rolling upgrade status. |
prepare |
Prepare a new rolling upgrade. |
finalize |
Finalize the current rolling upgrade. |
dfsadmin –getDatanodeInfo
hdfs dfsadmin -getDatanodeInfo <DATANODE_HOST:IPC_PORT>
獲取指定DataNode的資訊。這個命令可被用來檢出一個DataNode是否是alive,類似於Unix的ping命令。
dfsadmin-shutdownDatanode
hdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [upgrade]
向給定的DataNode提交一個關機請求,如果,可選引數upgrade被指定。訪問DataNode的客戶端將被建議等待直到DataNode重啟同時開啟快速啟動模式。當重啟沒有及時的發生,客戶端超時,然後忽視這個DataNode。在這種情況下,快速啟動模式將被禁止。
注意:命令不能等到DataNode關閉來完成。如果DataNode關閉沒有完成,命令“dfsadmin -getDatanodeInfo”可被用來檢查DataNode狀態。
namenode-rollingUpgrade
hdfs namenode -rollingUpgrade <downgrade|rollback|started>
當滾動升級正在進行中時,啟動選項-rollingUpgrade用來指定不同的滾動升級:
downgrade |
Restores the namenode back to the pre-upgrade release and preserves the user data. |
rollback |
Restores the namenode back to the pre-upgrade release but also reverts the user data back to the pre-upgrade state. |
started |
Specifies a rolling upgrade already started so that the namenode should allow image directories with different layout versions during startup. |