深度解析Spark底層執(zhí)行原理(建議收藏)
Spark簡(jiǎn)介
Apache Spark是用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,基于內(nèi)存計(jì)算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實(shí)時(shí)性,同時(shí)保證了高容錯(cuò)性和高可伸縮性,允許用戶將Spark部署在大量硬件之上,形成集群。
Spark源碼從1.x的40w行發(fā)展到現(xiàn)在的超過(guò)100w行,有1400多位大牛貢獻(xiàn)了代碼。整個(gè)Spark框架源碼是一個(gè)巨大的工程。下面我們一起來(lái)看下spark的底層執(zhí)行原理。
Spark運(yùn)行流程
Spark運(yùn)行流程
具體運(yùn)行流程如下:
SparkContext 向資源管理器注冊(cè)并向資源管理器申請(qǐng)運(yùn)行Executor
資源管理器分配Executor,然后資源管理器啟動(dòng)Executor
Executor 發(fā)送心跳至資源管理器
SparkContext 構(gòu)建DAG有向無(wú)環(huán)圖
將DAG分解成Stage(TaskSet)
把Stage發(fā)送給TaskScheduler
Executor 向 SparkContext 申請(qǐng) Task
TaskScheduler 將 Task 發(fā)送給 Executor 運(yùn)行
同時(shí) SparkContext 將應(yīng)用程序代碼發(fā)放給 Executor
Task 在 Executor 上運(yùn)行,運(yùn)行完畢釋放所有資源
1. 從代碼角度看DAG圖的構(gòu)建Val lines1 = sc.textFile(inputPath1).map(...).map(...)
Val lines2 = sc.textFile(inputPath2).map(...)
Val lines3 = sc.textFile(inputPath3)
Val dtinone1 = lines2.union(lines3)
Val dtinone = lines1.join(dtinone1)
dtinone.saveAsTextFile(...)
dtinone.filter(...).foreach(...)
上述代碼的DAG圖如下所示:
構(gòu)建DAG圖
Spark內(nèi)核會(huì)在需要計(jì)算發(fā)生的時(shí)刻繪制一張關(guān)于計(jì)算路徑的有向無(wú)環(huán)圖,也就是如上圖所示的DAG。
Spark 的計(jì)算發(fā)生在RDD的Action操作,而對(duì)Action之前的所有Transformation,Spark只是記錄下RDD生成的軌跡,而不會(huì)觸發(fā)真正的計(jì)算。
2. 將DAG劃分為Stage核心算法
一個(gè)Application可以有多個(gè)job多個(gè)Stage:
Spark Application中可以因?yàn)椴煌腁ction觸發(fā)眾多的job,一個(gè)Application中可以有很多的job,每個(gè)job是由一個(gè)或者多個(gè)Stage構(gòu)成的,后面的Stage依賴于前面的Stage,也就是說(shuō)只有前面依賴的Stage計(jì)算完畢后,后面的Stage才會(huì)運(yùn)行。
劃分依據(jù):
Stage劃分的依據(jù)就是寬依賴,像reduceByKey,groupByKey等算子,會(huì)導(dǎo)致寬依賴的產(chǎn)生。
回顧下寬窄依賴的劃分原則:
窄依賴:父RDD的一個(gè)分區(qū)只會(huì)被子RDD的一個(gè)分區(qū)依賴。即一對(duì)一或者多對(duì)一的關(guān)系,可理解為獨(dú)生子女。 常見的窄依賴有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned)等。
寬依賴:父RDD的一個(gè)分區(qū)會(huì)被子RDD的多個(gè)分區(qū)依賴(涉及到shuffle)。即一對(duì)多的關(guān)系,可理解為超生。常見的寬依賴有g(shù)roupByKey、partitionBy、reduceByKey、join(父RDD不是hash-partitioned)等。
核心算法:回溯算法
從后往前回溯/反向解析,遇到窄依賴加入本Stage,遇見寬依賴進(jìn)行Stage切分。
Spark內(nèi)核會(huì)從觸發(fā)Action操作的那個(gè)RDD開始從后往前推,首先會(huì)為最后一個(gè)RDD創(chuàng)建一個(gè)Stage,然后繼續(xù)倒推,如果發(fā)現(xiàn)對(duì)某個(gè)RDD是寬依賴,那么就會(huì)將寬依賴的那個(gè)RDD創(chuàng)建一個(gè)新的Stage,那個(gè)RDD就是新的Stage的最后一個(gè)RDD。
然后依次類推,繼續(xù)倒推,根據(jù)窄依賴或者寬依賴進(jìn)行Stage的劃分,直到所有的RDD全部遍歷完成為止。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 2 人形機(jī)器人,正狂奔在批量交付的曠野
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 5 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 6 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 7 2025年8月人工智能投融資觀察
- 8 9 Manus跑路,大廠掉線,只能靠DeepSeek了
- 10 a16z最新AI百?gòu)?qiáng)榜:硅谷頂級(jí)VC帶你讀懂全球生成式AI賽道最新趨勢(shì)