深入理解Spark之Spark的整體運行流程

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章