Spark源碼剖析(二):Spark內核架構深度剖析

千言萬語不如一張圖!算法

@Spark應用運行原理圖

Spark應用運行原理圖架構

 

流程梳理

  1. 使用standalone提交模式,將咱們編寫好的Application打成jar包上傳到某Spark節點上,經過spark-submit提交Application,該命令運行後在該節點會經過反射的方式,建立和構造一個DriverActor進程,就是咱們常常說的Driver,該進程負責執行咱們的Application,也就是咱們編寫的代碼。 
  2. 就像咱們編寫代碼同樣,Driver進程首先構造SparkConf,接着建立SparkContext對象,SparkContext在初始化的時候,會構造DAGSchedule和TaskScheduler。 
  3. TaskSchedule接着經過啓動本身的後臺進程,去鏈接Master,向Master註冊Application。 
  4. Master收到Application註冊的請求後,會使用本身的資源調度算法,爲該Application分配運行資源,分配完成後就通知Spark集羣上相應的Worker節點,爲這個Application啓動分配數量的Executor。 
  5. Executor啓動以後會本身反向註冊到TaskScheduler上去。 
  6. 當全部Executor完成反向註冊後,DriverActor繼續執行應用程序中的代碼,每執行到一個action操做,就會建立一個Job,Driver會將Job提交給DAGSchedule,DAGSchedule會將job基於Stage劃分算法劃分爲多個stage,而後每一個stage做爲TaskSets提交到TaskSchedule,隨後TaskSchedule會將TaskSet裏每個Task(task分配算法)提交到Executor上執行。(task分配算法) 
  7. Executor每接收到一個task,都會用TaskRunner(將咱們編寫的代碼,也就是要執行的算子以及函數,拷貝,反序列化,而後執行task)來封裝task,而後從線程池(每個Executor都有一個線程池)裏取出一個線程,執行這個task。 
  8. Task有兩種,shuffleMapTask和ResultTask,每一個Job中只有最後一個stage是ResultTask。 
  9. 因此最後整個spark應用程序的執行,就是stage分批次做爲taskset提交到Executor執行,每一個task針對RDD的一個partition,執行咱們定義的算子和函數,以此類推,直到全部操做執行結束爲止。

注意:這是整體架構歸納,後面的博文將對其中的各個組件和功能進行深度剖析!函數

相關文章
相關標籤/搜索