Spark應用執行機制

Spark是專門爲大規模數據設計的快速通用計算引擎。

Spark應用(Application)爲用戶提交的應用程序。執行模式有Local(測試),Standalone、Yarn和Mesos。根據Spark Application的Driver Program是否在集羣中運行,Spark應用的運行方式又可以分爲CustomerCluster模式和Client模式。


Spark涉及的基本概念:

Application:Spark的應用程序,用戶提交後,Spark爲App分配資源,將程序轉換並執行,其中Application包含一個Drive Program和若干個Executor。

Driver Progream: 運行Application的main()函數,並創建SparkContext。

SparkContext:Spark程序的入口,負責調度各個運算資源,協調各個worker Node上的Executor。

RDD Graph:RDD是Spark的核心結構,可以通過一系列算子進行操作(主要有Transformation和Action操作)。當RDD遇到Action算子時,將之前所有的算子形成一個有向無形環(DAG),再在Spark中轉化爲Job,提交到集羣執行。一個App中可以包含多個Job。

Executor:是爲Application在Worker Node上的一個進程,該進程負責運行Task,並且負責將數據存在內存或者磁盤中。每個Application都會申請各自的Executor來處理任務。

Work Node:集羣中任何可以運行Application代碼的節點,運行一個或多個Executor進程。


Spark組件:

Job:一個RDD Graph觸發的作業,往往由Spark Action觸發算子,在SparkContext中通過runJob方法想Spark提交Job。

Stage:每個Job會根據RDD的依賴關係被切分爲很多歌Stage,每個Stage中會包含一組相投的Task,這一組Task也叫TaskSet

Task:一個分區對應一個Task,Task執行RDD中對應的Stage包含的算子,Task被封裝好後放入Exector的線程池中執行。

DAGScheduler:根據Job構建基於Stage的DAG,並提交Stage給TaskSheduler。

TaskScheduler:將TaskSet提交給worker Node集羣並返回結果。


Spark執行機制

RDD的Action算子觸發Job的提交,提交到Spark中的Job生成的RDD DAG(有向無形環),由



Spark的底層實現

Spark的底層通過RDD對數據進行管理,RDD有一組分佈在不同節點的數據塊,當Spark的應用在對這個RDD進行操作的時候,調度器將包含操作的任務分發到指定的機器上執行,在計算節點通過多線程的方式執行任務。一個操作執行完畢,RDD便轉換到另一個RDD,這樣,用戶的操作依次執行。Spark爲了系統的內存不至於快速用完,使用延遲執行的方法執行,只有操作累積到Action,算子纔會觸發整個操作序列的執行,中間結果不會單獨再重新分配內存,而是在同一個數據塊上進行流水線操作。


Spark實現了分佈式計算和任務處理,並實現了任務的分發、跟蹤、執行等工作,最終聚合結果,完成Spark應用的計算。

對RDD的塊管理通過BlockManager完成,BlockManager將數據抽象爲數據塊,在內存或者磁盤進行存儲,如果數據不在本節點,則還可以通過遠端節點複製到本機進行計算。

在計算節點的執行器Exector中會創建線程池,這個執行器將需要執行的任務通過線程池進行併發執行。


應用提交和執行方式








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章