Spark:三種任務提交流程standalone、yarn-cluster、yarn-client


spark的runtime
參考:Spark:Yarn-cluster和Yarn-client區別與聯系
浪尖分享資料

standalone

Spark可以通過部署與Yarn的架構類似的框架來提供自己的集群模式。
該集群模式的架構設計與HDFS和Yarn大相徑庭,都是由一個主節點多個從節點組成。
在Spark 的Standalone模式中:
主:為master
從:為worker

任務提交流程:

  1. spark-submit 提交任務給 Master
  2. Master 收到任務請求后通過 LaunchDriver 向 Worker 請求啟動 Driver
  3. Worker 收到請求后啟動 Driver
  4. Driver 啟動后向 Master 注冊(用戶App信息)
  5. Master 收到 App 信息后根據資源的情況向 Worker 發送 launchExecutor 啟動 Excutor
  6. Worker 收到 Master 的請求后啟動相應的 Excutor
  7. Excutor 啟動后負責與 Driver 通信, 執行相關任務

(A3918569477848ACA78074F063CDDBAB)![作業提交流程].png


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)兩個角色。
  • 作業提交流程
  1. 由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等腳本)

  1. ASM 向 Scheduler 申請空閑 container
  2. Scheduler 向 ASM 返回空閑 container 信息(NM 等)
  3. RM(ASM)根據返回信息向 NM 申請資源。
  4. NM 分配創建一個container 並創建Spark Application Master(AM),此時 AM 上運行的是 Spark Driver。(每個SparkContext都有一個 AM)
  5. AM啟動后,和RM(ASM)通訊,請求根據任務信息向RM(ASM)申請 container 來啟動 executor
  6. RM(ASM)將申請到的資源信息返回給AM
  7. AM 根據返回的資源信息區請求對應的 NM 分配 container 來啟動 executor
  8. NM 收到請求會啟動相應的 container 並啟動 executor
  9. executor 啟動成后 反向向 AM 注冊
  10. executor 和 AM 交互 完成任務
  11. 后續的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一樣
  12. 等到所有的任務執行完畢后,AM 向 ASM 取消注冊並釋放資源

yarn-cluster 作業提交流程.png


  • yarn-client
    在yarn-client模式下,Driver運行在Client上,通過ApplicationMaster向RM獲取資源。本地Driver負責與所有的executor container進行交互,並將最后的結果匯總。
    整體的過程與yarn-cluster類似。
    不同點在於 Driver 是運行在本地客戶端,它的 AM 只是作為一個 Executor 啟動器,並沒有 Driver 進程。
    而且 Executor啟動后是與 Client 端的 Driver 進行交互的,所以 Client 如果掛了 任務也就掛了。

yarn-client  作業提交流程.png

在yarn-client、yarn-cluster 提交模式中,可以不啟動Spark集群,應為相關的jvm環境有yarn管理(啟動、結束等)。
standalone 提交模式中 Spark 集群一定要啟動,因為需要依賴worker、Master進行任務的啟動、調度等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM