大數據小白系列——HDFS(3)

這裏是大數據小白系列,這是本系列的第三篇,介紹HDFS中NameNode選舉,JournalNode等概念。程序員

上一期咱們說到了爲解決NameNode(下稱NN)單點失敗問題,HDFS中使用了雙NN的機制,一個Active NN,一個Standby NN。大數據

 

現實經常是,解決一個問題的同時,免不了又引入了另外的問題。spa

誰來擔任Active,誰來擔任Standby?設計

兩個NN誰也說服不了誰,這個時候須要引入一個外部角色:一個Zookeeper(下稱ZK)集羣。3d

ZK也是個頗有趣的東西,大數據小白系列後續會專門介紹。blog

這裏,ZK集羣扮演了相似裁判的角色,若是兩個NN同時申請成爲Active,由ZK決定誰將獲勝。進程

 

兩臺NN機器上都分別存在一個ZKCF(Zookeeper Failover Controller)進程,該進程至關於ZK的一個客戶端。同步

ZKFC按期檢查NN進程的狀態,如狀態正常,而且目前沒有其餘NN在持有ZK集羣上的鎖,則加入選舉,而且申請鎖。(注:所謂的鎖,其實是ZK集羣上的一種特殊目錄)數據分析

若ZKFC檢查NN進程不正常,則退出選舉,並放棄ZK上的鎖(如持有)。it

 

Q:若是不是NN進程死了,而是整個NN機器掉電了呢?

A:當集羣與ZKFC進程的鏈接斷開超過必定時間,鎖將自動過時,以便其餘NN能夠申請從新選舉。

Q:若是Active、Standby都死了呢?

A:很差意思,那就死透了。

 


 

上一期提到的另一個內容,Active NN負責將Edit Log寫入某個「共享存儲」,而Standby NN負責從該位置讀取以保持同步。

最簡單的,可使用NFS(Network File System)來擔任共享存儲。

可是NFS自己成爲了單點失敗,即,若是NFS系統壞了,致使Edit Log沒法讀寫,整個HDFS系統也就沒法工做。

所以,HDFS推薦使用的是專爲Edit Log高可用性所設計的「JournalNode(下稱JN))集羣」。

NN經過QJM(Quorum Journal Manager)進程將Edit Log寫入某JN節點,該JN節點須要將數據寫入其餘JN節點,直到數據被寫入集羣中的「多數節點」,本次操做纔算成功。

例如,JN集羣中共有3個節點,須要寫入到其中2個節點,即所謂的「多數」(majority)。

一般,JN集羣老是包含奇數個節點,至於爲何,我準備在介紹ZK的時候再來講明,由於兩者比較相似。

須要注意,雖然QJM的工做機制相似於ZK,但自己並無用到ZK,同時它也比ZK來的輕量級,它能夠跑在集羣現有的機器上,而不須要單獨爲它準備機器。

 

好了,這期就先到這,下期咱們將介紹現實世界中的HDFS集羣,以及Federation等概念。Cheers!

 

做者公衆號「程序員雜書館」,專一大數據,歡迎關注,每位關注者將獲贈《Spark快速大數據分析》紙質書一本

相關文章
相關標籤/搜索