一、前言

上一篇博文講解了Zookeeper的典型應(yīng)用場景,在大數(shù)據(jù)時代,各種分布式系統(tǒng)層出不窮,其中,有很多系統(tǒng)都直接或間接使用了Zookeeper,用來解決諸如配置管理、分布式通知/協(xié)調(diào)、集群管理和Master選舉等一系列分布式問題。

二、 Hadoop

Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce,分別提供了對海量數(shù)據(jù)的存儲和計算能力,后來,Hadoop又引入了全新MapReduce框架YARN(Yet Another Resource Negotiator)。在Hadoop中Zookeeper主要用于實現(xiàn)HA(High Availability),這部分邏輯主要集中在Hadoop Common的HA模塊中,HDFS的NameNode與YARN的ResourceManager都是基于此HA模塊來實現(xiàn)自己的HA功能,YARN又使用了Zookeeper來存儲應(yīng)用的運(yùn)行狀態(tài)。

YARN

YARN是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。其可以支持MapReduce模型,同時也支持Tez、Spark、Storm、Impala、Open MPI等。

YARN主要由ResourceManager(RM)、NodeManager(NM)、ApplicationManager(AM)、Container四部分構(gòu)成。其中,ResourceManager為全局資源管理器,負(fù)責(zé)整個系統(tǒng)的資源管理和分配。由YARN體系架構(gòu)可以看到ResourceManager的單點問題,ResourceManager的工作狀況直接決定了整個YARN架構(gòu)是否可以正常運(yùn)轉(zhuǎn)。

ResourceManager HA

為了解決ResourceManager的單點問題,YARN設(shè)計了一套Active/Standby模式的ResourceManager HA架構(gòu)。

由上圖可知,在運(yùn)行期間,會有多個ResourceManager并存,并且其中只有一個ResourceManager處于Active狀態(tài),另外一些(允許一個或者多個)則處于Standby狀態(tài),當(dāng)Active節(jié)點無法正常工作時,其余處于Standby狀態(tài)的節(jié)點則會通過競爭選舉產(chǎn)生新的Active節(jié)點。

主備切換

ResourceManager使用基于Zookeeper實現(xiàn)的ActiveStandbyElector組件來確定ResourceManager的狀態(tài)。具體步驟如下

1. 創(chuàng)建鎖節(jié)點。在Zookeeper上會有一個類似于/yarn-leader-election/pseudo-yarn-rm-cluster的鎖節(jié)點,所有的ResourceManager在啟動時,都會去競爭寫一個Lock子節(jié)點(/yarn-leader-election/pseudo-yarn-rm-cluster/ActiveStandbyElectorLock),子節(jié)點類型為臨時節(jié)點,利用Zookeeper的特性,創(chuàng)建成功的那個ResourceManager切換為Active狀態(tài),其余的為Standby狀態(tài)。

2. 注冊Watcher監(jiān)聽。所有Standby狀態(tài)的ResourceManager都會向/yarn-leader-election/pseudo-yarn-rm-cluster/ActiveStandbyElectorLock節(jié)點注冊一個節(jié)點變更監(jiān)聽,利用臨時節(jié)點的特性,能夠快速感知到Active狀態(tài)的ResourceManager的運(yùn)行情況。

3. 主備切換。當(dāng)Active的ResourceManager無法正常工作時,其創(chuàng)建的Lock節(jié)點也會被刪除,此時,其余各個Stand

網(wǎng)友評論