????????Spark作業(yè)運行的集群環(huán)境有兩種均驶,分別基于standalone模式和Yarn集群模式郑口。我們知道Yarn集群提供了HA來保證了集群的高可用颓影,而standalone也提供了一種集群高可用的方法各淀,即通過配置可以實現(xiàn)雙master機制,保證在一個master掛掉以后诡挂,另外一個master立即啟用碎浇。spark的主備切換提供了兩種模式,一種是基于文件系統(tǒng)的璃俗,另外一種是基于zookeeper的奴璃。下面我們來看看spark集群的master主備切換是怎么實現(xiàn)的,如下圖所示城豁;
1.當active master掛掉以后苟穆,通知standby master啟動,并使用持久化引擎對持久化數(shù)據(jù)進行讀瘸恰雳旅;
2.持久化引擎將不為空的數(shù)據(jù)全部注冊到master的內(nèi)存緩沖中;
3.master向所有的Application间聊,Worker發(fā)送自己的地址信息攒盈;
4.Application,Driver哎榴,Worker收到消息并返回一個消息告知master沦童;
5.master一一接收到來自各個Application,worker叹话,Driver的消息以后,開始過濾掉沒有響應(yīng)的節(jié)點信息墩瞳,然后開始調(diào)用scheduler()方法驼壶,開始為相關(guān)進程分配資源;
通過以上原理的介紹喉酌,下面看看我們的源碼具體是怎么實現(xiàn)的热凹,
????????關(guān)于持久化引擎的補充說明,在spark中引入了三種持久化引擎泪电,分別是基于文件的持久化引擎般妙,基于zookeeper的持久化引擎,BlackHolePersistenceEngine引擎相速;系統(tǒng)默認采用的是基于文件的持久化引擎碟渺,可以通過spark.deploy.recoveryMode參數(shù)配置具體采用那種持久化引擎,該參數(shù)的設(shè)置位置時spark-env.sh中突诬。
設(shè)置為zookeeper的方式:
//spark.deploy.recoveryMode=ZOOKEEPER
//spark.deploy.zookeeper.url=192.168.1.100:2181,192.168.1.101:2181
// /spark是默認的苫拍,可以不寫
//spark.deploy.zookeeper.dir=/spark
設(shè)置為基于文件系統(tǒng)的方式:
spark.deploy.recoveryMode=FILESYSTEM
spark.deploy.recoveryDirectory=/usr/local/src/spark/dataDir
總結(jié):到這里基本上關(guān)于spark的HA的原理及實現(xiàn)分析就完了芜繁,后續(xù)關(guān)于其他組件的實現(xiàn)及源碼不定期更新,歡迎關(guān)注绒极。
如需轉(zhuǎn)載骏令,請注明:
上一篇:Spark內(nèi)核分析之SparkContext初始化源碼分析