天天看點

spark的任務排程流程(三)

spark任務排程

1、送出spark應用,每一個saprk的應用叫做application;

2、./bin/spark-submit 送出代碼,啟動driver;

3、啟動driver也就意味着開始要執行代碼,執行代碼的時候初始化sparkContext,即建構DAGScheduler和TaskScheduler;

4、TaskScheduler向master注冊,master接到請求之後,向worker申請Executor,接着worker為aplication啟動多個Executor ;

5、Driver把Application資訊注冊給Master後Master會根據Application資訊去Worker節點啟動Executor;

6、executor啟動完成以後,executor會反向driver去注冊,然後driver就知道那些executor為這個application任務服務了,到這兒SparkContext完成了初始化操作,然後代碼的執行能夠每執行一個action操作,就會建立一個job任務,job任務送出給DAGScheduler,DAGScheduler會将job拆分成多個stage,每個stage建立以TaskSet集合;

7、DAGScheduler負責把spark作業轉換成Stage的DAG[有向無環圖],根據寬窄依賴切分Satge,然後把Stage封裝成TaskSet的形式發送TaskScheduler,同時DAGScheduler還會處裡由于shuffle資料跌勢導緻的失敗;

8、TaskScheduler會把TaskSet裡面每個task都市送出給executor去執行,【維護所有TaskSet,分發Task給各個節點的Executor,監控task的運作狀态,負責重試失敗的task】executor每收到一個Task,都會啟動taskrunner去封裝task,然後從線程池裡取出一個線程來執行task:shuffleMaptask or ResultTask,最後一個stage裡面都是reultTask,其餘都是shuffleMapTask【task時針對裡面的每一個partition執行我們定義好的算子操作;

9、所有task運作完成後,SparkContext向Master注釋,釋放資源;

spark關鍵術語:

master節點:常駐master程序,負責管理全部worker節點;

worker節點:常駐worker程序,負責管理executor并與master節點通信;

driver:使用者自己編寫的應用程式;

executor:每個工作節點上為應用啟動的一個程序,該程序負責運作任務,并且将資料存在記憶體和磁盤上,每個job各自有獨立的execcutor,主要職責:1、初始化程式要執行的上下問sparkEnv,解決應用程式需要運作的jar包的依賴、加載類2、彙報目前任務的狀态【監控和執行器】;

job:多個task的并行計算,時RDD裡面的action,每個action算子的執行會生成一個job,job->DAGScheduler->task/stage/;

stage:一個job會被拆分成多個task,每組任務被分為一個stage,stage分為shuffle和result如果多個job中有多次shuffle,每個shuffle之前都是一個stage,shuffle的算子有distict/reduceByKey/groupByKey/sortByKey/表關聯join/重分區repartition or coalexce,增加分區提高并行

繼續閱讀