1. 程式人生 > >Spark核心架構深度剖析

Spark核心架構深度剖析

1(圖中流程標號):當我們在strandalone模式下提交我們的spark應用時,會建立和構造一個DriverActor程序出來,這個程序會執行我們的Application應用程式。。。

2寫過spark應用程式的都知道,第一步需要構造SparkConf然後建立一個SC(SparkContext),重點來了,SparkContext在初始化的時候最重要的是幹兩件事:就是構造DAGScheduler和TaskScheDuler。

3:然後,TaskScheduler會負責,通過他的一個後臺程序,去連線Master,向Master註冊Application.

4:Master接收到TaskScheduler的註冊請求後,會使用自己的資源排程演算法,在Spark叢集的Worker上為Application申請多個Executor,並且通知Worker啟動相應的Executor。(實際中有許多的Worker和Executor,這裡只用一個來畫圖展示)

5:Worker會為Application啟動相應的Executor。

6:Executor啟動後會把自己反向註冊到Taskscheduler上面去,至此SparkContext的初始化結束,Driver繼續執行我們的程式。

7:每當執行到一個action操作(例如:foreach...)的時候,就會建立一個job,並將job提交給DAGSheduler,DAGScheduler會將job劃分為多個stage(按照寬依賴進行劃分),然後每個stage建立一個TaskSet,並將TaskSet交給TaskSheduler。

8:TaskSheduler會將每一個TaskSet中的每一個task提交到executor上執行(task分配演算法)。

9:Executor每接收到一個task,就會用TaskRunner來封裝task,然後丟入執行緒池進行執行。

總結:spark應用程式的執行,就是stage分批次的作為task提交到executor執行,每一個task針對RDD的partition,執行我們的運算元和函式,以此類推,直到所有的操作執行完為止。