1. 程式人生 > >HDFS Rolling Upgrade

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.