本課主題
- 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彻底解密
时间: 2024-10-04 16:47:58