Yige

Yige

Build

Spark基礎-Spark作業提交

Spark 基礎 - Spark 作業提交#

內容整理自:

  1. Spark 架構與作業執行流程

Spark 提交作業流程#

名詞概念#

  • Application: 用戶編寫的 Spark 應用程序,包含了一個 Driver 功能的代碼和分布在集群中多個節點上運行的 Executor 代碼

  • Driver: Driver 即運行上述 Application 的 main () 函數並且創建 SparkContext 準備 Spark 應用程序的運行環境。在 Spark 中由 SparkContext 負責和 ClusterManager 通信,進行資源的申請、任務的分配和監控等;當 Executor 部分運行完畢後,Driver 負責將 SparkContext 關閉。通常用 SparkContext 代表 Driver

  • Worker:集群中任何可以運行 Application 代碼的節點,類似於 YARN 中的 NodeManager 節點。在 Standalone 模式中指的就是通過 Slave 文件配置的 Worker 節點,在 Spark on Yarn 模式中指的就是 NodeManager 節點

  • Executor: Application 運行在 Worker 節點上的一個進程,該進程負責運行 Task,並且負責將數據存在內存或者磁碟上,每個 Application 都有各自獨立的一批 Executor

  • Cluster Manager:指的是在集群上獲取資源的外部服務,目前有:

    1. Standalone:Spark 原生的資源管理,由 Master 負責資源的分配
    2. Hadoop Yarn:由 YARN 中的 ResourceManager 負責資源的分配

執行流程#

兩個核心:DAGSchedulerTaskScheduler
image.png
詳情見: Spark 進階 - Spark 調度系統

Spark 三種作業提交模式#

local 模式#

  • local 模式下,沒有所謂的master+worker這種概念
  • local 模式,相當於,啟動一個本地進程,然後在一個進程內,模擬 spark 集群中作業的運行一個 spark 作業,就對應了進程中的一個或多個 executor 線程,就開始執行,包括作業的調度,task 分配

Standalone 提交模式#

standalone 模式提交,需要將 master 設置成 spark://master_ip,比如 spark://192.168.75.101:7077

Standalone Client 模式#

image.png

流程描述

  1. 客戶端啟動後直接運行用戶程序,啟動 Driver 相關的工作:DAGScheduler 和 BlockManagerMaster 等。

  2. 客戶端的 Driver 向 Master 註冊。

  3. Master 還會讓 Worker 啟動 Executor。Worker 創建一個 ExecutorRunner 線程,ExecutorRunner 會啟動 ExecutorBackend 進程。

  4. ExecutorBackend 啟動後會向 Driver 的 SchedulerBackend 註冊。Driver 的 DAGScheduler 解析作業並生成相應的 Stage,每個 Stage 包含的 Task 通過 TaskScheduler 分配給 Executor 執行。

  5. 所有 stage 都完成後作業結束

Standalone Cluster 模式#

image.png

  1. 客戶端提交作業給 master

  2. Master 選擇一個 Worker 節點啟動 Driver,即SchedulerBackend。Worker 創建一個 DriverRunner 線程,DriverRunner 啟動 SchedulerBackend 進程

  3. Master 讓其餘 Worker 啟動 Executor,即ExecutorBackend。Worker 創建一個 ExecutorRunner 線程,ExecutorRunner 會啟動 ExecutorBackend 進程

  4. ExecutorBackend 啟動後會向 Driver 的 SchedulerBackend 註冊。SchedulerBackend 進程中包含 DAGScheduler,它會根據用戶程序,生成執行計劃,並調度執行。對於每個 stage 的 task,會被存放到 TaskScheduler 中,ExecutorBackend 向 SchedulerBackend 匯報的時候把 TaskScheduler 中的 task 調度到 ExecutorBackend 執行

Standalone Client 和 Standalone Cluster 區別#

  • client mode 下,在哪台機器上用 spark-submit 腳本提交 application,driver 就會在那台機器上啟動
  • cluster mode 下,driver 會通過 master 進程,隨機被分配給某一個 worker 進程來啟動

Yarn 提交模式#

Yarn-Client 模式#

image.png

  1. Spark Yarn Client 向 YARN 的ResourceManager申請啟動Application Master

  2. ResourceManager 收到請求後,在集群中選擇一個 NodeManager,為該應用程序分配第一個 Container,要求它在這個 Container 中啟動應用程序的 ApplicationMaster,與 YARN-Cluster 區別的是在該 ApplicationMaster 不運行 SparkContext,只與 SparkContext 進行聯繫進行資源的分派

  3. Client 中的 SparkContext 初始化完畢後,與 ApplicationMaster 建立通訊,向 ResourceManager 註冊,根據任務信息向 ResourceManager 申請資源(Container)

  4. ApplicationMaster 申請到資源(也就是 Container)後,便與對應的 NodeManager 通信,要求它在獲得的 Container 中啟動啟動 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 啟動後會向 Client 中的 SparkContext 註冊並申請 Task

  5. Client 中的 SparkContext 分配 Task 給 CoarseGrainedExecutorBackend 執行,CoarseGrainedExecutorBackend 運行 Task 並向 Driver 匯報運行的狀態和進度

  6. 應用程序運行完成後,Client 的 SparkContext 向 ResourceManager 申請註銷並關閉自己

YARN-Cluster 模式#

image.png
在 YARN-Cluster 模式中,當用戶向 YARN 中提交一個應用程序後,YARN 將分兩個階段運行該應用程序:

  • 第一个階段是把 Spark 的 Driver 作為一個 ApplicationMaster 在 YARN 集群中先啟動;
  • 第二個階段是由 ApplicationMaster 創建應用程序,然後為它向 ResourceManager 申請資源,並啟動 Executor 來運行 Task,同時監控它的整個運行過程,直到運行完成

YARN-Client 與 YARN-Cluster 區別#

  • YARN-Cluster模式下,Driver 運行在 AM (Application Master) 中,它負責向 YARN 申請資源,並監督作業的運行狀況。當用戶提交了作業之後,就可以關掉 Client,作業會繼續在 YARN 上運行,因此 YARN-Cluster 模式不適合運行交互類型的作業

  • YARN-Client模式下,Application Master 僅僅向 YARN 請求 Executor,Client 會和請求的 Container 通信來調度它們的工作,也就是說 Client 不能離開。Driver 運行在提交 spark 作業的客戶端機器上,可以實時看到詳細的日誌信息,方便追蹤和排查錯誤,用於測試

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。