Spark任務(wù)調(diào)度流程

image.png

1.啟動Spark集群

2.執(zhí)行jar包

3.啟動了Driver進程(通過執(zhí)行代碼啟動了Driver) 然后生成了兩個對象DSGSchedule TASKSchedule

4.當TaskSchedule創(chuàng)建完成之后向master發(fā)送一個請求:為當前的Application申請資源。申請多少資源是有默認值的,或者配置值如下

image.png

5.Master接受了資源請求后,根據(jù)自己所管理的資源情況,會通知資源充足的Worker節(jié)點上啟動Executor進程

6.Master向worker發(fā)送消息:在你的節(jié)點上啟動Executor 啟動什么樣子的Executor也在這個消息里告訴(此時所有的Executor全部啟動起來)

7.每一個Executor進程啟動完畢后都會反向注冊給TASKSchedule(當?shù)?步完事兒后 TaskSchedule就有一批Executor地址)

(3.4.5.6.7是第二行代碼觸發(fā)的)

8.(然后第三行代碼)當遇到count算子時候會觸發(fā)job的執(zhí)行,DAGSchedule根據(jù)RDD寬窄依賴切割job,劃分stage,stage內(nèi)部的rdd一定是窄以來,stage與stage之間是寬依賴,切割完畢后DAGSchedule會將這個stage中所有的task封裝到taskSet對象中然后發(fā)送給TaskSchedule。(發(fā)送指的是DAGSchedule調(diào)用了TaskSchedule的一個submittask方法)

9.taskSchedule接受到每一個TaskSet對象后,都會遍歷這個TaskSet集合,將集合中每一個task發(fā)送到Executor中執(zhí)行。

補充 TaskSchedule 在發(fā)送每一個task之前,首先要看一下要計算數(shù)據(jù)的位置。

Spark可以復用資源(Executor)這是由于Spark粗粒度資源調(diào)度導致

而MR這種細粒度資源調(diào)度計算框架,只要上一個Action算子執(zhí)行完畢后啟動的Executor會被kill掉。

注意:如果想讓你的Application分布式計算,那么你的代碼中就不要設(shè)置conf,setMsater為local,干脆不用設(shè)置

并且在提交Application的時候要指定--master這個選項以及選項參數(shù)(spark://hadoop1:7077

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容