????????Spark作業(yè)運(yùn)行的集群環(huán)境有兩種,分別基于standalone模式和Yarn集群模式。我們知道Yarn集群提供了HA來保證了集群的高可用,而standalone也提供了一種集群高可用的方法,即通過配置可以實(shí)現(xiàn)雙master機(jī)制,保證在一個(gè)master掛掉以后,另外一個(gè)master立即啟用。spark的主備切換提供了兩種模式,一種是基于文件系統(tǒng)的,另外一種是基于zookeeper的。下面我們來看看spark集群的master主備切換是怎么實(shí)現(xiàn)的,如下圖所示;

1.當(dāng)active master掛掉以后,通知standby master啟動(dòng),并使用持久化引擎對(duì)持久化數(shù)據(jù)進(jìn)行讀取;
2.持久化引擎將不為空的數(shù)據(jù)全部注冊(cè)到master的內(nèi)存緩沖中;
3.master向所有的Application,Worker發(fā)送自己的地址信息;
4.Application,Driver,Worker收到消息并返回一個(gè)消息告知master;
5.master一一接收到來自各個(gè)Application,worker,Driver的消息以后,開始過濾掉沒有響應(yīng)的節(jié)點(diǎn)信息,然后開始調(diào)用scheduler()方法,開始為相關(guān)進(jìn)程分配資源;
通過以上原理的介紹,下面看看我們的源碼具體是怎么實(shí)現(xiàn)的,




????????關(guān)于持久化引擎的補(bǔ)充說明,在spark中引入了三種持久化引擎,分別是基于文件的持久化引擎,基于zookeeper的持久化引擎,BlackHolePersistenceEngine引擎;系統(tǒng)默認(rèn)采用的是基于文件的持久化引擎,可以通過spark.deploy.recoveryMode參數(shù)配置具體采用那種持久化引擎,該參數(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是默認(rèn)的,可以不寫
//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的原理及實(shí)現(xiàn)分析就完了,后續(xù)關(guān)于其他組件的實(shí)現(xiàn)及源碼不定期更新,歡迎關(guān)注。
如需轉(zhuǎn)載,請(qǐng)注明:
上一篇:Spark內(nèi)核分析之SparkContext初始化源碼分析