基本概念
http://spark.apache.org/docs/latest/cluster-overview.html
●名詞解釋
1.Application:指的是用戶編寫的Spark應用程序/代碼,包含了Driver功能代碼和分佈在集羣中多個節點上運行的Executor代碼。
2.Driver:Spark中的Driver即運行上述Application的Main()函數並且創建SparkContext,SparkContext負責和ClusterManager通信,進行資源的申請、任務的分配和監控等
3.Cluster Manager:指的是在集羣上獲取資源的外部服務,Standalone模式下由Master負責,Yarn模式下ResourceManager負責;
4.Executor:是運行在工作節點Worker上的進程,負責運行任務,併爲應用程序存儲數據,是執行分區計算任務的進程;
5.RDD:Resilient Distributed Dataset彈性分佈式數據集,是分佈式內存的一個抽象概念;
6.DAG:Directed Acyclic Graph有向無環圖,反映RDD之間的依賴關係和執行流程;
7.Job:作業,按照DAG執行就是一個作業;Job==DAG
8.Stage:階段,是作業的基本調度單位,同一個Stage中的Task可以並行執行,多個Task組成TaskSet任務集
9.Task:任務,運行在Executor上的工作單元,一個Task計算一個分區,包括pipline上的一系列操作
基本流程
●Spark運行基本流程
1.當一個Spark應用被提交時,首先需要爲這個Spark Application構建基本的運行環境,即由任務控制節點(Driver)創建一個SparkContext,
2.SparkContext向資源管理器註冊並申請運行Executor資源;
3.資源管理器爲Executor分配資源並啓動Executor進程,Executor運行情況將隨着心跳發送到資源管理器上;
4.SparkContext根據RDD的依賴關係構建成DAG圖,並提交給DAGScheduler進行解析劃分成Stage,並把該Stage中的Task組成Taskset發送給TaskScheduler。
5.TaskScheduler將Task發放給Executor運行,同時SparkContext將應用程序代碼發放給Executor。
6.Executor將Task丟入到線程池中執行,把執行結果反饋給任務調度器,然後反饋給DAG調度器,運行完畢後寫入數據並釋放所有資源。
流程圖解
總結
1.Spark應用被提交-->SparkContext向資源管理器註冊並申請資源-->啓動Executor
2.RDD-->構建DAG-->DAGScheduler劃分Stage形成TaskSet-->TaskScheduler提交Task-->Worker上的Executor執行Task