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

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
6月20日立即下載>> 【白皮書】精準(zhǔn)測量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報名>> 【在線會議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會
-
7.30-8.1火熱報名中>> 全數(shù)會2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動力電池技術(shù)應(yīng)用大會
-
免費(fèi)參會立即報名>> 7月30日- 8月1日 2025全數(shù)會工業(yè)芯片與傳感儀表展
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過于簡單
- 10 一文看懂視覺語言動作模型(VLA)及其應(yīng)用