Spark2.0 scheduler模塊源碼學習

Scheduler模塊主要負責stage的劃分窥淆,以及job的調度及submit座云。是整個spark計算流程中比較重要的部分碎连。

?1.從saveAsTextFile開始

??閱讀該部分代碼可以從任意一個action方法開始训桶,例如saveAsTextFile方法:

一路跟下去直到PairRDDFunctions.saveAsHadoopDataset中有一行self.context.runJob(self,writeToFile)奄喂,如下:

該方法中入參writeToFile是用來定義stage執(zhí)行邏輯的函數(要注意的是scala里函數和方法是有區(qū)別的)婆赠,該函數運用了closure特性在實際運行過程中不斷的針對stage的各個partition信息(不同的partition輸出位置等屬性不同)來重新初始化自由變量writer绵脯。

而Utils.tryWithSafeFinallyAndFailureCallbacks方法則是一個被curry化的函數,封裝了固定的異常處理機制休里。

因為當前action是saveTextAsHadoopFile操作蛆挫,所以該函數的功能就是將當前拿到的partition的數據寫入到指定路徑。

2.DAGScheduler.submitJob

然后看runJob方法妙黍,從這里一路跟蹤到DAGScheduler.submitJob方法(在跟蹤過程中會看到對func序列化的操作)悴侵,然后會看到這里:

Spark的計算框架是基于Event隊列機制運作的,諸如job的submit拭嫁、cancel可免,Excecutor的添加、丟失等操作做粤。當需要執(zhí)行某操作時浇借,會向操作對應的EventLoop中發(fā)送Event,該Event會被添加至Queue中怕品,然后順序處理妇垢。如下為DAGSchedulerEventProcessLoop的消息處理邏輯:

3.DAGScheduler.handleJobSubmitted

點進去看到DAGScheduler. handleJobSubmitted方法。

在該方法中肉康,將當前正在運行的job添加至active中闯估,發(fā)送SparkListenerJobStart事件,用來監(jiān)控Job處理的進度吼和,在UI界面上展示涨薪。

4.DAGScheduler. submitStage

然后看submitStage方法,該方法是用來提交spark job的炫乓,提交時會從整個DAG圖的最后一個stage開始進行刚夺,逐個查找其parent stage献丑,直到找不到未執(zhí)行的parent stage后再開始執(zhí)行當前遞歸查找到的stage中的tasks。在stage查找其parent stages的過程中光督,會更新stage的狀態(tài)變更為waiting阳距、running、failed结借。下面具體分析一下:

首先系統(tǒng)會判斷入參stage是否目前為止還未被調度過(分為因parent stage missing而等待、執(zhí)行中卒茬、執(zhí)行失敗三種狀態(tài))船老。這里的missing應該是指未被系統(tǒng)檢測到也就是待計算的意思。因為查找是從DAG圖的最后一個stage開始的圃酵,在查找開始前其parent都是missing的柳畔。

如果是則通過getMissingParentStages獲取其missing的parent stage。getMissingParentStages稍后再解釋郭赐。

如果stage沒有parent薪韩,則說明當前DAG分支已經找到了source,這時候直接提交stage的task即可捌锭。提交task的方法為submitMissingTasks俘陷。

如果找到了parent,則依次將其parent全部提交观谦,然后遞歸查找其parent的parent stage拉盾,同時將當前stage添加到waitingStages贿肩,直到job完成或失敗后洲赵,stage會被-=掉,參考(DAGScheduler. markMapStageJobAsFinished方法)农渊。

submitStages方法執(zhí)行后泻红,會調用submitWaitingStages方法夭禽,將當前waiting的stages按照升序提交一下。

5.DAGScheduler. getMissingParentStages

下面看一下getMissingParentStages方法:

該方法用來查找一個stage的parent stage的谊路,也就是我們所說的劃分stage的邏輯讹躯。因為stage是由rdd組成,劃分stage是基于rdd之間的依賴關系是否為shuffleDependency(寬依賴)來決定的凶异。代碼中可以看到蜀撑,如果是寬依賴則構建一個stage,如果是窄依賴剩彬,則繼續(xù)向上查找酷麦。

在該方法中構建了一個stack waitingForVisit,用來存儲當前迭代到的不是shuffleDependency的rdd喉恋。

將當前stage的rdd push到這個stack中沃饶,調用visit方法判斷其Dependency類型母廷。Visit方法首先會判斷這個rdd是否已經計算完畢,判斷依據為該rdd的partition是否都有了輸出糊肤。

如果沒有計算完成琴昆,則判斷其Dependency類型,如果為寬依賴馆揉,則封裝一個stage添加到missing中业舍。如果未窄依賴,則獲取該窄依賴的rdd升酣,將其push到stack中舷暮,待下一次繼續(xù)查找。

直到最終返回missing噩茄。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末下面,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子绩聘,更是在濱河造成了極大的恐慌沥割,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凿菩,死亡現場離奇詭異机杜,居然都是意外死亡,警方通過查閱死者的電腦和手機蓄髓,發(fā)現死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門叉庐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人会喝,你說我怎么就攤上這事陡叠。” “怎么了肢执?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵枉阵,是天一觀的道長。 經常有香客問我预茄,道長兴溜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任耻陕,我火速辦了婚禮拙徽,結果婚禮上,老公的妹妹穿的比我還像新娘诗宣。我一直安慰自己膘怕,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布召庞。 她就那樣靜靜地躺著岛心,像睡著了一般来破。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘古,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天徘禁,我揣著相機與錄音,去河邊找鬼髓堪。 笑死送朱,一個胖子當著我的面吹牛,可吹牛的內容都是我干的旦袋。 我是一名探鬼主播骤菠,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疤孕!你這毒婦竟也來了?” 一聲冷哼從身側響起央拖,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤祭阀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鲜戒,有當地人在樹林里發(fā)現了一具尸體专控,經...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年遏餐,在試婚紗的時候發(fā)現自己被綠了伦腐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡失都,死狀恐怖柏蘑,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情粹庞,我是刑警寧澤咳焚,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站庞溜,受9級特大地震影響革半,放射性物質發(fā)生泄漏。R本人自食惡果不足惜流码,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一又官、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漫试,春花似錦六敬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崖疤。三九已至,卻和暖如春典勇,著一層夾襖步出監(jiān)牢的瞬間劫哼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工割笙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留权烧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓伤溉,卻偏偏與公主長得像般码,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乱顾,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容