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