本課主題
- Master HA 解析
- Master HA 解析源碼分享
[引言部份:你希望讀者看完這篇博客后有那些啟發、學到什么樣的知識點]
更新中......
Master HA 解析

- 生產環境下一般采用 ZooKeeper 做 HA,且建義為 3台 Master, ZooKeeper 會自動管理 Master 的切換
- 采用 ZooKeeper 做 HA 的時候,ZooKeeper 會負責保存整個 Spark 集群運行的元數據:所有 Worker 的信息, 所有 Driver 的信息, 應用程序的信息 和 所有Executor 的信息
- ZooKeeper 遇到當前Active 級別的Master 出現故障的時候從Standby Masters 中選取出一台作為Active , 但是要注意,被選舉后到成為真正的Active Master 之間需要從ZooKeeper 中獲取集群當前運行狀態的元數據信息並進行恢復;
- 在 Master 切換的過程中,所有已經在運行的程序皆正常運行!因為 Spark Application 在運行前就已經通過 Cluster Manager 獲得了計算資源 所以在運行時 Job 本身的調度和處理和 Master 是沒有任何關系的!
- 在Master 的切換過程中唯一的影響是不能提交新的Job: 一方面不能提交新的應用程序給集群,因為只有Active Master 才能接受新的程序的提交請求;另外一方面,已經運行的程序也不能夠因為Action 操作觸發新的Job 的提交請求。
Spark Master HA on ZooKeeper 切換流程圖





Master HA 的四大方式
- Master HA 的四大方式:分別是 ZOOKEEPER,FILESYSTEM, CUSTOM, NONE;
- 需要說明的是:
- ZOOKEEPER 是自動管理 Master;
- FILESYSTEM 的方式在 Master 出現突障后需要手動啟動機器,機器啟動后會立即成為 Active 級別的 Master 來對外提供服務(接受應用程序提交的請求、接受新的 Job 運行的請求)
- CUSTOM 的方式允許用戶自定義 Master HA 的實現,這對於高級用戶特別有用;
- NONE,這是默應情況,當我們下載安裝了 Spark 集群中就是采用這種方式,該方式不會持久化集群的數據, Driver, Application, Worker and Executor. Master 啟動起立即管理集群;



- Persistence Engine 中有一個至關重要的方法 persists 來實現數據持久化

readPersistedData 來獲取恢復集群中的元數據
現在去看看它的createdLeaderElectionAgent的方法

- FILESYSTEM 和 NONE 的方式均是采用 MonarchyLeaderAgent 的方式來完成 Leader的選舉的,其實際實現是直接把傳入的 Master 作為 Leader


- NONE 的方式根本不需要持久化引擎,它為什么要搞一個BlackHoleEngine

- 對一些WorkerState狀態為UNKNOWN 的話(Worker不響應),就把它刪除掉,如果你是以集群方式運行的話,driver 失敗話可以重新啟動一下,最后把狀態變回ALIVE,這里注意要加入--supervise這一個參數。

[總結部份]
更新中......
參考資料
資料來源來至 DT大數據夢工廠 大數據傳奇行動 第29課:Master HA徹底解密
Spark源碼圖片取自於 Spark 1.6.0版本
