Spark程式的端到端執行架構解讀
阿新 • • 發佈:2018-12-09
Spark任務提供多層分解的概念,Spark元件將使用者的應用程式分解為內部執行任務並提供執行容器,資源管理為spark元件提供資源管理和排程。
Spark任務:
- 應用程式:由一個driver program和多個job構成;
- job:由多個stage組成;
- stage:對應一個taskset,
- taskset:對應一組關聯的相互之間沒有shuffle依賴關係的task組成。
- task:任務最小的工作單
Spark元件:
- Driver Program (驅動程式) 是Spark 的核心元件
- 構建SparkContext(Spark應用的入口,它負責和整個叢集的互動,建立需要的變數,還包含叢集的配置資訊等)
- 將使用者提交的job轉換為DAG圖(類似資料處理的流程圖)
- 根據策略將DAG圖劃分為多個stage,根據分割槽從而生成一系列tasks
- 根據tasks要求向資源管理器申請資源
- 提交任務並檢測任務狀態
- Executor真正執行task的單元,一個Worker Node上可以有多個Executor
資源管理元件
- YARN(通用) Master/Slave結構
- Resource Manager(RM)全域性的資源管理器,負責系統的資源管理和分配
- Node Manager(NM)每個節點上的資源和工作管理員
- ApplicationMaster(AM)每個應用程式都有一個,負責任務的排程和監視,並與RM排程器協商為任務獲取資源。
- Standalone(Spark自帶)Master/Slave結構
- Master類似於YARN的RM
- Worker類似於YARN的NM
Spark的任務執行流程
- Driver完成task的解析和生成
- Driver向Cluster Manager(叢集資源管理器)申請執行task需要的資源。
- 叢集資源管理器為task分配滿足要求的節點,並在節點按照要求建立Executor
- 建立的Executor向Driver註冊。
- Driver將spark應用程式的程式碼和檔案傳送給分配的executor
- executor執行task,執行完之後將結果返回給Driver或者寫入HDFS或其他介質。