Spark中的任務(wù)調(diào)度總結(jié)
1.集群?jiǎn)?dòng)
在work節(jié)點(diǎn)啟動(dòng)后會(huì)向master節(jié)點(diǎn)注冊(cè)資源情況,有多少的core和內(nèi)存都會(huì)上報(bào)master統(tǒng)一進(jìn)行管理。master節(jié)點(diǎn)會(huì)知道所有work節(jié)點(diǎn)的資源情況。
2.job執(zhí)行
寫(xiě)好的應(yīng)用程序提交到客戶端
命令 | 說(shuō)明 |
---|---|
Spark-submit —master spark:{ip}:7077 —class {jarPath} | 提交jar包 |
在客戶端執(zhí)行jar包之后會(huì)先啟動(dòng)Driver進(jìn)程,jar包運(yùn)行到new SparkContext()的時(shí)候會(huì)創(chuàng)建兩個(gè)重要的對(duì)象,分別是DAGScheduler和TaskScheduler。
- 以下是SparkContext對(duì)象中的源碼:
TaskScheduler對(duì)象的創(chuàng)建
TaskScheduler對(duì)象創(chuàng)建完畢后挟憔,會(huì)向Spark工作集群申請(qǐng)資源,準(zhǔn)備為當(dāng)前的應(yīng)用程序進(jìn)行資源的調(diào)度,最終結(jié)果把所有的Executro的進(jìn)程地址反向注冊(cè)給TaskScheduler烟号。
-
TaskScheduler對(duì)象構(gòu)建的流程:
DAGScheduler對(duì)象的創(chuàng)建
當(dāng)遇到Action算子的時(shí)候會(huì)觸發(fā)job的執(zhí)行,DAGScheduler根據(jù)RDD的寬窄依賴(lài)劃分Stage,切割完畢后會(huì)把Stage中所有的Task放到TaskSet對(duì)象中發(fā)送給TaskScheduler绊谭。
- DAGScheduler對(duì)象構(gòu)建的流程:
執(zhí)行任務(wù)
從上面的兩個(gè)對(duì)象中已經(jīng)得到了2個(gè)信息
- 通過(guò)Execute的反向注冊(cè),TaskScheduler已知所有的Execute的地址。
- 通過(guò)Stage的TaskSet已得到所有的Task
接下來(lái)就是分發(fā)Task到Execute進(jìn)程中汪拥,在TaskScheduler對(duì)象中會(huì)遍歷TaskSet集合把Task分發(fā)到各個(gè)Execute進(jìn)程中去執(zhí)行job达传。
- 分發(fā)task到Execute中執(zhí)行job: