千言萬語不如一張圖!算法
Spark應用運行原理圖架構
反射
的方式,建立和構造一個DriverActor進程,就是咱們常常說的Driver,該進程負責執行咱們的Application
,也就是咱們編寫的代碼。 SparkConf
,接着建立SparkContext對象
,SparkContext在初始化的時候,會構造DAGSchedule和TaskScheduler
。 TaskSchedule
接着經過啓動本身的後臺進程,去鏈接Master,向Master註冊Application。 資源調度算法
,爲該Application分配運行資源,分配完成後就通知Spark集羣上相應的Worker節點,爲這個Application啓動分配數量的Executor。 Executor啓動以後會本身反向註冊到TaskScheduler上去
。 每執行到一個action操做,就會建立一個Job
,Driver會將Job提交給DAGSchedule,DAGSchedule會將job基於Stage劃分算法劃分爲多個stage
,而後每一個stage做爲TaskSets
提交到TaskSchedule,隨後TaskSchedule會將TaskSet裏每個Task(task分配算法
)提交到Executor上執行。(task分配算法) TaskRunner
(將咱們編寫的代碼,也就是要執行的算子以及函數,拷貝,反序列化,而後執行task)來封裝task,而後從線程池
(每個Executor都有一個線程池)裏取出一個線程,執行這個task。 shuffleMapTask和ResultTask
,每一個Job中只有最後一個stage是ResultTask。 就是stage分批次做爲taskset提交到Executor執行,每一個task針對RDD的一個partition,執行咱們定義的算子和函數
,以此類推,直到全部操做執行結束爲止。注意:這是整體架構歸納,後面的博文將對其中的各個組件和功能進行深度剖析!函數