文章目錄
- 核心組件
- 核心概念
- 提交流程
核心組件

Spark框架可以大致分三個部分:
第一部分: Driver + Executor ,任務執行和調度
第二部分: Master + Worker ,Saprk自身的資源調度框架,只有Standalone模式下才有Master和Worker.
第三部分: Cluster Manager ,集群管理中間件,協調任務的調度
-
Application:Spark應用程式:Spark Application的概念 和 Hadoop MapReduce中的類似,指的是用戶撰寫的Spark應用程式,包含了 一個Driver功能代碼 和 分布在集群中多個節點上運行的Executor代碼;
Spark應用程式,可以呼叫多次行動算子,每呼叫一次行動算子,都會提交一個Job, -
Driver:驅動程式:即運行上述Application的main()函式并且創建SparkContext,即創建SparkContext的程式,
在Spark中由 SparkContext負責 和 ClusterManager通信,進行資源的申請、任務的分配和監控等;當Executor部分運行完畢后,Driver負責將SparkContext關閉,- 用于執行Spark任務中的main()方法,負責實際代碼的執行
- 將用戶程式轉化為job;
- 調度Executor之間的任務(task);
- 跟蹤Executor的執行情況;
- 通過UI展示查詢運行的結果,
-
Executor:資源管理器:Application運行在 Worker 節點上的一個JVM行程,負責在 Spark 作業中運行具體任務(Task),并且負責將資料存在記憶體或者磁盤上,任務彼此之間相互獨立,
在Spark on Yarn模式下,其行程名稱為CoarseGrainedExecutorBackend,類似于Hadoop MapReduce中的YarnChild,一個CoarseGrainedExecutorBackend行程有且僅有一個executor物件,它負責將Task包裝成taskRunner,并從執行緒池中抽取出一個空閑執行緒運行Task,每個CoarseGrainedExecutorBackend能并行運行Task的數量就取決于分配給它的CPU的個數了;- Worker節點上的一個JVM行程,負責Spark作業中,執行具體的任務(task);
- 負責運行組成Spark應用的任務,并將結果回傳給驅動器行程;
- 在執行器內有塊管理器,為用戶程式中要求快取的RDD提供記憶體的快取,
-
Master:資源管理器:負責資源的調度和分配,并進行集群的監控,類似于YARN中的ResourceManager節點,
- Standalone:Spark原生的資源管理,由Master負責資源的分配
- Hadoop Yarn:由YARN中的ResourceManager負責資源的分配;
-
Worker:計算節點:運行在集群的一個節點,由Master分配資源對資料進行并行的處理和計算,類似于YARN中的NodeManager節點,
- Standalone模式:指的就是通過Slave檔案配置的Worker節點,
- Spark on Yarn模式:指的就是NodeManager節點;
核心概念
-
Task:任務:被送到某個Executor上的作業任務;單個磁區資料集上的最小處理流程單元,同一個Stage的每個磁區的資料,可以交給一個Task進行處理;
-
Job:作業:由一個或多個Stage所組成的一次計算作業;
包含多個Task組成的并行計算,往往由行動算子提交,一個job包含多個RDD,及作用于相應RDD上的各種Operation,一個DAG其實就是一個Job -
Stage:階段:每個Job會被拆分很多組Task,每組任務被稱為Stage,也可稱TaskSet;
一個Stage對應一個TaskSet;
DAG會根據 shuffle/寬依賴 劃分Stage(也就是TaskSet),每產生一次shuffle,就會生成一個新階段,一個Job的stage的數量 = shuffle算子的個數 + 1;
Stage分成兩種型別ShuffleMapStage、ResultStage,
-
DAG:有向無環圖(Directed Acyclic Graph):有向無環圖是由點和線組成的拓撲圖形,該圖形具有方向,不會倍訓;
就是映射RDD之間的依賴關系,會根據依賴關系被劃分成多個Stag
- 支持 DAG 的框架被劃分為第二代計算引擎,如Tez、Oozie :作業和作業之間的有向無環圖
- 第三代計算引擎的特點主要是 Job 內部的 DAG 支持(不跨越 Job),如Spark:作業內部的有向無環圖
-
Parallelism:并行度:整個集群并行執行任務的數量,稱為并行度,
提交流程
Spark應用程式主要有兩種部署執行的方式:Client 和 Cluster,兩種模式:
主要區別在于:Driver程式的運行節點位置;
- Client(默認): 會在Client本地啟動Driver程式,jar包只需要在Client端有即可,
- Cluster: 會在集群中選擇其中一臺機器啟動Driver程式,確保jar包可以在集群的任意臺Worker都可以讀到,
Standalone運行模式

Yarn運行模式


Yarn Cluster模式
Cluster模式 將用于監控和調度的Driver模塊啟動在Yarn集群資源中執行,一般應用于生產環境,
- 在 YARN Cluster 模式下,任務提交后會和 ResourceManager 通訊申請啟動 ApplicationMaster,
- 隨后 ResourceManager 分配 container,在合適的 NodeManager 上啟動 ApplicationMaster,此時的 ApplicationMaster 就是Driver,
- Driver啟動后向 ResourceManager 申請 Executor 記憶體,ResourceManager 接到ApplicationMaster的資源申請后會分配container,然后在合適的NodeManager上啟動Executor行程
- Executor行程啟動后會向Driver反向注冊,Executor全部注冊完成后Driver開始執行main函式,
- 之后執行到Action算子時,觸發一個Job,并根據寬依賴開始劃分stage,每個stage生成對應的TaskSet,之后將task分發到各個Executor上執行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/1380.html
標籤:其他
