Spark核心架構深度剖析 阿新 • • 發佈:2018-12-11 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,執行我們的運算元和函式,以此類推,直到所有的操作執行完為止。