1. 程式人生 > >hadoop 高可用中journal 的作用

hadoop 高可用中journal 的作用

中的NameNode好比是人的心臟,非常重要,絕對不可以停止工作。在hadoop1時代,只有一個NameNode。如果該NameNode資料丟失或者不能工作,那麼整個叢集就不能恢復了。這是hadoop1中的單點問題,也是hadoop1不可靠的表現,如圖1所示。hadoop2就解決了這個問題。

image

圖1 

hadoop2.2.0(HA)中HDFS的高可靠指的是可以同時啟動2個NameNode。其中一個處於工作狀態,另一個處於隨時待命狀態。這樣,當一個NameNode所在的伺服器宕機時,可以在資料不丟失的情況下,手工或者自動切換到另一個NameNode提供服務。 

這些NameNode之間通過共享資料,保證資料的狀態一致。多個NameNode之間共享資料,可以通過Nnetwork File System或者Quorum Journal Node

前者是通過linux共享的檔案系統,屬於作業系統的配置;後者是hadoop自身的東西,屬於軟體的配置

我們這裡講述使用Quorum Journal Node的配置方式,方式是手工切換。 

叢集啟動時,可以同時啟動2個NameNode。這些NameNode只有一個是active的,另一個屬於standby狀態。active狀態意味著提供服務,standby狀態意味著處於休眠狀態,只進行資料同步,時刻準備著提供服務,如圖2所示。

image

圖2 

架構 

在一個典型的HA叢集中,每個NameNode是一臺獨立的伺服器。在任一時刻,只有一個NameNode處於active狀態,另一個處於standby狀態。其中,active狀態的NameNode負責所有的客戶端操作,standby狀態的NameNode處於從屬地位,維護著資料狀態,隨時準備切換。 

兩個NameNode為了資料同步,會通過一組稱作JournalNodes的獨立程序進行相互通訊。當active狀態的NameNode的名稱空間有任何修改時,會告知大部分的JournalNodes程序。standby狀態的NameNode有能力讀取JNs中的變更資訊,並且一直監控edit log的變化,把變化應用於自己的名稱空間。standby可以確保在叢集出錯時,名稱空間狀態已經完全同步了,如圖3所示。

image

圖3 

為了確保快速切換,standby狀態的NameNode有必要知道叢集中所有資料塊的位置。為了做到這點,所有的datanodes必須配置兩個NameNode的地址,傳送資料塊位置資訊和心跳給他們兩個

。 

對於HA叢集而言,確保同一時刻只有一個NameNode處於active狀態是至關重要的。否則,兩個NameNode的資料狀態就會產生分歧,可能丟失資料,或者產生錯誤的結果。為了保證這點,JNs必須確保同一時刻只有一個NameNode可以向自己寫資料。 

硬體資源 

為了部署HA叢集,應該準備以下事情:

* NameNode伺服器:執行NameNode的伺服器應該有相同的硬體配置。

* JournalNode伺服器:執行的JournalNode程序非常輕量,可以部署在其他的伺服器上。注意:必須允許至少3個節點。當然可以執行更多,但是必須是奇數個,如3、5、7、9個等等。當執行N個節點時,系統可以容忍至少(N-1)/2(N至少為3)個節點失敗而不影響正常執行。 

在HA叢集中,standby狀態的NameNode可以完成checkpoint操作,因此沒必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,還會報錯。