《深入理解Spark》之Spark的整體執行流程

lyzx_in_csdn發表於2018-08-15

spark作為流行的計算框架,下面是其執行流程圖,以Cluster模式為例

spark執行流程圖
Spark執行流程圖,author:lyzx_hero


1、通過spark-submit的方式提交作業,此時應用程式向master傳送請求啟動Driver程式
    Driver程式負責對資源和任務的排程
2、Master在資源充足的Worker上啟動一個Driver程式
    這裡需要注意是Master找到資源充足的Worker並向其傳送訊息有Worker啟動Driver程式
3、當Driver啟動後,Driver就開始排程任務,首先初始化SparkContext
    在初始化SparkContext時會產生兩個重要的物件,1個是DAGSchedule另一個是TaskSchedule
    首先是TaskSchedule的實現類 TaskScheduleImpl 由它負責具體的任務排程 (當然不同的任務排程由不同的實現類實現,後續文章會有介紹)
    DAGSchedule負責任務的邏輯排程和stage切分
    最後還會開啟一個jetty的web服務,埠預設是4040,向外提供作業的web服務
    此時算是SparkContext初始化完成
4、當Spark上下文初始化完成後就需要去執行具體的job即我們寫的Spark程式碼,此時Driver會向Master申請資源(在啟動任務時填寫的資源)
5、Master找出資源充足的Worker並啟動Executor (與Driver一樣,Executor也是有Worker啟動的)
6、當Executor啟動完畢後會反向註冊給 TaskScheduleImpl(給該app分配的executor不再經過Master而是直接到該APP對應的TaskScheduleImpl上註冊)
7、此時整個Spark作業需要的資源就已經申請完成了

    剩下的就是按照spark作業執行任務 有DAGSchedule切分Stage並封裝為TaskSet
    由TaskScheduleImpl拆分TaskSet並執行對應的任務
8、將執行的任務返回給客戶端

總結:所謂的Master和Worker只是Spark內建資源排程框架中資源管理主節點和從節點的叫法,在yarn中叫ResourceManager和NodeManager。

相關文章