Master HA源码解析
1、Master HA概述
Spark在生產(chǎn)上做HA一般采用的是通過(guò)zookeeper的方式,配置3個(gè)master的話是比較可靠的方式。采用zookeeper做HA的話zookeeper會(huì)保存整個(gè)Spark程序運(yùn)行時(shí)候的元數(shù)據(jù)(包括Workers,Drivers,Applications,Executors等信息)。
采用zookeeper的數(shù)據(jù)保存方式,啟動(dòng)的時(shí)候會(huì)讀取zookeeper中曾經(jīng)保存的數(shù)據(jù),這樣再次啟動(dòng)的集群就是在上一次關(guān)閉集群的已有狀態(tài)基礎(chǔ)上繼續(xù)已有的狀態(tài)。
zookeeper本身提供的leader選舉機(jī)制,具體工作的時(shí)候會(huì)有一個(gè)leader的一臺(tái)機(jī)器,負(fù)責(zé)對(duì)外提供服務(wù)。提交程序的時(shí)候其實(shí)就是交給作為leader的master(activer級(jí)別的),其他作為follower,利用這個(gè)機(jī)制就要可以保證集群中多個(gè)master,只有一個(gè)是activer。當(dāng)activer級(jí)別的出現(xiàn)故障的,作為standby的master就會(huì)被zookeeper通過(guò)自己的機(jī)制選舉出來(lái),由于zookeeper中保留了集群的信息(worker的信息,driver的信息,所有應(yīng)用程序的信息),這些信息會(huì)被持久化到zookeeper中,所以在切換的過(guò)程中只會(huì)有一個(gè)影響就是只會(huì)影響新的job的提交。在粗粒度模式下,通過(guò)cluster Manage獲取計(jì)算資源之后就和cluster Manage沒(méi)有關(guān)系了,接下來(lái)的是driver和executor的交互,所以master掛掉并不影響實(shí)際的運(yùn)行。
?
2、Master HA的四種方式
Master HA的四種方式:zookeeper,fileSystem(對(duì)實(shí)時(shí)性要求不高可用),custom(自定義),none。
master啟動(dòng)的時(shí)候會(huì)根據(jù)具體的RECOVERY_MODE選擇具體不同的HA和元數(shù)據(jù)持久化恢復(fù)的方式
在master的onStart方法中有如下代碼
這里的RECOVERY_MODE就是從配置中獲取的信息,然后進(jìn)行模式匹配,這里有4中不同的case。ZOOKEEPER的方式是new ZookeeperRecoveryModeFactory,是StandaloneRecoveryModeFactory的子類(lèi)如果客戶需要自動(dòng)以就繼承這個(gè)類(lèi)并重寫(xiě)createPersistenceEngine(這個(gè)是數(shù)據(jù)持久化的引擎)和createLeaderElectionAgent方法(這個(gè)是leader選舉的代理)。
數(shù)據(jù)持久化引擎關(guān)系到怎么具體持久化drivers,applications,workers,executors的信息;而leader選舉的代理涉及到我們,在當(dāng)activer級(jí)別的master出故障的時(shí)候怎么從standby模式中選取出一個(gè)leader,進(jìn)一步進(jìn)行數(shù)據(jù)恢復(fù)。
在PersistenceEngine中有一個(gè)至關(guān)重要的方法persist來(lái)實(shí)現(xiàn)數(shù)據(jù)持久化。
fileSystem和None的方式MonarchyLeaderAgent選舉,實(shí)現(xiàn)方法就是將直接傳入的master設(shè)置為leader
3、Master HA基于Zookeeper的工作機(jī)制
zookeeper做HA的機(jī)制。首先從zookeeper的方式講,zookeeper會(huì)自動(dòng)的實(shí)現(xiàn)master切換,所以在這個(gè)切換過(guò)程中是:
(1)Zookeeper自動(dòng)選舉出作為leader的Master后;
(2)使用zookeeper持久化引擎ZookeeperPersistenceEngine去讀取我們集群的狀態(tài)數(shù)據(jù):drivers,applications,workers,還有具體的executors等信息;
(3)下一步就是判斷元數(shù)據(jù)信息是否有空的內(nèi)容;
(4)然后將持久化獲得的drivers,applications,workers,executors等信息重新進(jìn)行注冊(cè),放到作為leader的master的內(nèi)存中緩存起來(lái);
(5)有這些信息了,肯定要確認(rèn)一下這些信息是否和現(xiàn)在集群中你的信息是否是一致的,所以這時(shí)候會(huì)把a(bǔ)pplications,drivers等的信息變成unkown方式,然后向application所對(duì)應(yīng)的driver以及worker發(fā)送從Standby的master變成leader的地址信息;
(6)地址信息發(fā)過(guò)去后,driver,worker正常運(yùn)行的話就會(huì)接收到地址信息,返回響應(yīng)給master;
(7)轉(zhuǎn)過(guò)來(lái)master接收到來(lái)自drivers和workers的響應(yīng)信息后會(huì)使用一個(gè)關(guān)鍵的方法:completeRecovery來(lái)對(duì)沒(méi)有響應(yīng)的applications(driver)和workers(executor)進(jìn)行處理,處理之后master的State會(huì)合并,RecoveryState.ALIVE從而開(kāi)始可以對(duì)外提供服務(wù);
(8)此時(shí)Master調(diào)用自己的Scheduler方法對(duì)正在進(jìn)行等待的Applications和Drivers進(jìn)行資源調(diào)度。
?
總結(jié)
以上是生活随笔為你收集整理的Master HA源码解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hive基础(一)
- 下一篇: Jupyter Notebook安装 n