spark的runtime
參考:Spark:Yarn-cluster和Yarn-client區別與聯系
浪尖分享資料
standalone
Spark可以通過部署與Yarn的架構類似的框架來提供自己的集群模式。
該集群模式的架構設計與HDFS和Yarn大相徑庭,都是由一個主節點多個從節點組成。
在Spark 的Standalone模式中:
主:為master
從:為worker
任務提交流程:
- spark-submit 提交任務給 Master
- Master 收到任務請求后通過 LaunchDriver 向 Worker 請求啟動 Driver
- Worker 收到請求后啟動 Driver
- Driver 啟動后向 Master 注冊(用戶App信息)
- Master 收到 App 信息后根據資源的情況向 Worker 發送 launchExecutor 啟動 Excutor
- Worker 收到 Master 的請求后啟動相應的 Excutor
- Excutor 啟動后負責與 Driver 通信, 執行相關任務
Spark on Yarn
- Application Master
在YARN中,每個Application實例都有一個Application Master進程,它是Application啟動的第一個容器。它負責和ResourceManager打交道,並請求資源。獲取資源之后告訴NodeManager為其啟動container。 - yarn-cluster和yarn-client模式的區別
yarn-cluster和yarn-client模式的區別其實就是Application Master(AM)進程的區別,yarn-cluster模式下,driver運行在AM中,它負責向YARN申請資源,並監督作業的運行狀況。
當用戶提交了作業之后,就可以關掉Client,作業會繼續在YARN上運行,顯然yarn-cluster模式不適合運行交互類型的作業。
而yarn-client模式下,ApplicationMaster僅僅向YARN請求executor,client會和請求的container通信來調度他們工作,也就是說Client不能離開。
- yarn-cluster
與standalone模式不同,yarn-cluster是基於yarn集群進行調度管理的,yarn集群上有ResourceManager(RM)和NodeManager(NM)兩個角色。 - 作業提交流程
- 由client向RM提交請求,並上傳jar到HDFS上
這期間包括四個步驟:
a). 連接到RM
b). 從 RM ASM(Applications Manager )中獲得metric、queue和resource等信息。
c). 上傳 app jar and spark-assembly jar
d). 設置運行環境和container上下文(launch-container.sh等腳本)
- ASM 向 Scheduler 申請空閑 container
- Scheduler 向 ASM 返回空閑 container 信息(NM 等)
- RM(ASM)根據返回信息向 NM 申請資源。
- NM 分配創建一個container 並創建Spark Application Master(AM),此時 AM 上運行的是 Spark Driver。(每個SparkContext都有一個 AM)
- AM啟動后,和RM(ASM)通訊,請求根據任務信息向RM(ASM)申請 container 來啟動 executor
- RM(ASM)將申請到的資源信息返回給AM
- AM 根據返回的資源信息區請求對應的 NM 分配 container 來啟動 executor
- NM 收到請求會啟動相應的 container 並啟動 executor
- executor 啟動成后 反向向 AM 注冊
- executor 和 AM 交互 完成任務
- 后續的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一樣
- 等到所有的任務執行完畢后,AM 向 ASM 取消注冊並釋放資源
- yarn-client
在yarn-client模式下,Driver運行在Client上,通過ApplicationMaster向RM獲取資源。本地Driver負責與所有的executor container進行交互,並將最后的結果匯總。
整體的過程與yarn-cluster類似。
不同點在於 Driver 是運行在本地客戶端,它的 AM 只是作為一個 Executor 啟動器,並沒有 Driver 進程。
而且 Executor啟動后是與 Client 端的 Driver 進行交互的,所以 Client 如果掛了 任務也就掛了。
在yarn-client、yarn-cluster 提交模式中,可以不啟動Spark集群,應為相關的jvm環境有yarn管理(啟動、結束等)。
standalone 提交模式中 Spark 集群一定要啟動,因為需要依賴worker、Master進行任務的啟動、調度等。