概要
介紹Stage轉(zhuǎn)為Task纳猫,提交給Executor運(yùn)行的過程婆咸。
Task介紹
Task是執(zhí)行計(jì)算的單元,Executor調(diào)用Task對象的runTask方法完成計(jì)算芜辕。查看定義
Task有兩個子類擅耽,并且和Stage的類型存在對應(yīng)關(guān)系,即Stage會轉(zhuǎn)為對應(yīng)的Task物遇,如下
Task | 對應(yīng)的Stage |
---|---|
ShuffleMapTask | ShuffleMapStage |
ResultTask | ResultStage |
最后乖仇,UML如下
submitMissingTasks
上一篇介紹了submitStage方法,當(dāng)提交的Stage沒有父Stage或父Stage已執(zhí)行完畢時询兴,調(diào)用submitMissingTasks方法乃沙,查看該方法
這是submitMissingTasks的開始部分,作用如圖中注釋诗舰。
preferred location
接著查看submitMissingTasks方法警儒,根據(jù)cache信息和RDD的preferredLocations獲取preferred location
broadcast taskBinary
把Stage的RDD和ShuffleDependency(或func)廣播到Executor
Stage類型不同,廣播內(nèi)容不同
Stage | 廣播內(nèi)容1 | 廣播內(nèi)容2 |
---|---|---|
ShuffleMapStage | rdd: RDD | shuffleDep: ShuffleDependency |
ResultStage | rdd: RDD | func: (TaskContext, Iterator[_]) => _ |
Stage轉(zhuǎn)為Task
根據(jù)Stage類型眶根,生成對應(yīng)的Task蜀铲,taskBinary變量是上面剛介紹的,廣播到Executor節(jié)點(diǎn)的
上圖中可以看到另一個重要信息属百,Partition和Task數(shù)的對應(yīng)關(guān)系记劝,RDD的一個Partition對應(yīng)生成一個Task。
send Task
最后一步族扰,發(fā)送Task到Executor
至此厌丑,submitMissingTasks方法執(zhí)行完畢定欧,Task也被發(fā)送Executor。
總結(jié)
介紹Task類怒竿,及submitMissingTasks方法中Stage轉(zhuǎn)為Task并提交的細(xì)節(jié)砍鸠,主要步驟如下
- 獲取preferred location。
- broadcast taskBinary耕驰。
- Stage轉(zhuǎn)為Task爷辱。
- send Task。