spark基本工做流程

引言數據庫

Spark的應用分爲任務調度和任務執行兩個部分,全部的Spark應用程序都離不開SparkContext和Executor兩部分,Executor負責執行任務,運行Executor的機器稱爲Worker節點,SparkContext由用戶程序啓動,經過資源調度模塊和Executor通訊。多線程

具體來講,以SparkContext爲程序運行的總入口,在SparkContext的初始化過程當中,Spark會分別建立DAGScheduler做業調度和TaskScheduler任務調度兩級調度模塊。架構

其中做業調度模塊是基於任務階段的高層調度模塊,它爲每一個Spark做業計算具備依賴關係的多個調度階段(一般根據shuffle來劃分),而後爲每一個階段構建出一組具體的任務(一般會考慮數據的本地性等),而後以TaskSets(任務組)的形式提交給任務調度模塊來具體執行。而任務調度模塊則負責具體啓動任務、監控和彙報任務運行狀況。函數

spark應用程序的運行架構:spa

(1)簡單的說:線程

由driver向集羣申請資源,集羣分配資源,啓動executor。driver將spark應用程序的代碼和文件傳送給executor。executor上運行task,運行完以後將結果返回給driver或者寫入外界。orm

(2)複雜點說:隊列

提交應用程序,構建sparkContext,構建DAG圖,提交給scheduler進行解析,解析成一個個stage,提交給集羣,由集羣任務管理器進行調度,集羣啓動spark executor。driver把代碼和文件傳給executor。executor進行各類運算完成task任務。driver上的block tracker記錄executor在各個節點上產生的數據塊。task運行完以後,將數據寫入HDFS上或者其餘類型數據庫裏。資源

(3)全面點說:spark

spark應用程序進行各類transformation的計算,最後經過action觸發job。提交以後首先經過sparkContext根據RDD的依賴關係構建DAG圖,DAG圖提交給DAGScheduler進行解析,解析時是以shuffle爲邊界,反向解析,構建stage,stage之間也有依賴關係。這個過程就是對DAG圖進行解析劃分stage,而且計算出各個stage之間的依賴關係。而後將一個個TaskSet提交給底層調度器,在spark中是提交給taskScheduler處理,生成TaskSet manager,最後提交給executor進行計算,executor多線程計算,計算完反饋給TaskSetmanager,再反饋給taskScheduler,而後再反饋回DAGScheduler。所有運行完以後寫入數據。

(4)更加深刻理解:

應用程序提交後,觸發action,構建sparkContext,構建DAG圖,提交給DAGScheduler,構建stage,以stageSet方式提交給TaskScheduler,構建taskSet Manager,而後將task提交給executor運行。executor運行完task後,將完成信息提交給schedulerBackend,由它將任務完成的信息提交給TaskScheduler。TaskScheduler反饋信息給TaskSetManager,刪除該task任務,執行下一個任務。同時TaskScheduler將完成的結果插入到成功隊列裏,加入以後返回加入成功的信息。TaskScheduler將任務處理成功的信息傳給TaskSet Manager。所有任務完成後TaskSet Manager將結果反饋給DAGScheduler。若是屬於resultTask,交給JobListener。若是不屬於resultTask,保存結果。

 

spark做業提交到執行

SparkContext經過DAGScheduler的runJob提交做業。而後DAGScheduler將Job劃分爲Stage,Spark根據RDD的依賴關係劃分Stage,最終將其封裝成taskset進行提交。TaskScheduler類負責任務調度資源的分配,SchedulerBackend負責與Master、Worker通訊收集Worker上分配給該應用使用的資源狀況。executor負責具體的任務執行。

Driver的任務提交過程

一、Driver程序的代碼運行到action操做,觸發了SparkContext的runJob方法。二、SparkContext調用DAGScheduler的runJob函數。三、DAGScheduler把Job劃分stage,而後把stage轉化爲相應的Tasks,把Tasks交給TaskScheduler。四、經過TaskScheduler把Tasks添加到任務隊列當中,交給SchedulerBackend進行資源分配和任務調度。五、調度器給Task分配執行Executor,ExecutorBackend負責執行Task。

相關文章
相關標籤/搜索