Spark的運行模式講解

一、背景

yarn是hadoop體系中的資源調度管理機制,在上面可以運行多套計算框架比如MapReduce;同樣也支持Spark。這不僅使得應用程序部署更加方便,也是用戶的在yarn集羣中運行的服務和Application的資源管理也完全隔離。更具有價值的是yarm通過隊列的方式,同時管理集羣中的多個服務。

二、yarn-client模式

1.yarn-client運行流程圖

在這裏插入圖片描述

2.yarn-client的工作流程

  1. 啓動應用程序,在SparkContext創建過程中、會初始化DAGScheduler、YarnScheduler、YarnClientSchedulerBackend等調度器。並且YarnClientSchedulerBackend會在內部啓動DriverEndpoint和CLient。然後Client會向Yarn集羣的ResourceManager申請啓動ApplicationMaster。
  2. ResourceManager收到請求會在集羣中選取一個NodeManager,爲這個應用程序分配第一個Container,並在這個Container中啓動ApplicationMaster;與yarn-cluster的區別是這個ApplicationMaster不運行SparkContext,只會與SparkContext聯繫進行資源分配。
  3. SparkContext啓動完成後會與ApplicationMaster建立通信,ApplicationMaster也會獲取任務資源配置信息;同時會向ResourceManager註冊並申請資源,也就是Container容器。
  4. ApplicationMaster獲取到申請資源後,會與對應的NodeManager通信,要求它在Container中啓動CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在啓動之後也會向SparkContext註冊並申請任務集。
  5. CoarseGrainedExecutorBackend執行分配的任務,並且會向DriverEndpoint彙報運行狀態和進度,以便客戶端掌握任務的運行狀態。
  6. 應用程序完成後SparkContext會向ResourceManager註銷自己關閉自身。

三、yarn-cluster模式

1.yarn-cluster運行流程圖

2.yarn-cluster的工作流程

  1. 客戶端提交應用程序時,收線啓動Client向yarn提交應用,包括啓動ApplicationMaster的命令、提交給ApplicationMaster的程序、需要在Executor中執行的程序…
  2. ResourceManager收到請求會在集羣中選取一個NodeManager,爲這個應用程序分配第一個Container,並在這個Container中啓動ApplicationMaster;並且初始化SpartContext以及相關的調度器。
  3. ApplicationMaster會向ResourceManager註冊,這樣我們就可以通過yarn的資源管理界面查看應用的運行狀態;然後ApplicationMaster會輪詢爲哥哥任務申請資源,並監控他們的狀態直到他們的生命週期結束。
  4. ApplicationMaster獲取到申請資源後(Container),會與對應的NodeManager通信,要求它在Container中啓動CoarseGrainedExecutorBackend,而CoarseGrainedExecutorBackend在啓動之後也會向SparkContext註冊並申請任務集。
  5. CoarseGrainedExecutorBackend執行分配的任務,並且會向DriverEndpoint彙報運行狀態和進度,以便客戶端掌握任務的運行狀態。
  6. 應用程序完成後SparkContext會向ResourceManager註銷自己關閉自身。

四、yarn-client與yarn-cluster對比

理解這兩種模式要特別注意ApplicationMaster。在yarn中每個Application實例都有一個ApplicationMaster進程,它們是Application啓動的第一個容器負責和ResourceManager打交道申請資源。獲取資源後通知NodeManager爲其啓動。yarn-client與yarn-cluster的區別就是ApplicationMaster進程的區別。

  • yarn-client:ApplicationMaster僅僅是向yarn請求Executor,Client會和請求的Container通信來調度他們,Client是不能離開的。
  • yarn-cluster:Driver運行在ApplicationMaster中,它負責向yarn申請資源,並簡單度任務的運行狀況,我們提交完任務後Client就可以關閉,任務會繼續運行在yarn集羣上,因此這總模式不適合交互類的作業。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章