Spark流程的內部實現

2021-09-28 20:20:40 字數 2474 閱讀 7531

1.1 driver

spark驅動器節點,用於執行spark任務中的main方法,負責實際**的執行工作。driver在spark作業執行時主要負責:

將使用者程式轉化為job

在executor中間進行排程任務(task)

跟蹤executor的執**況

通過ui展示查詢運**況

1.2 executor

executor實際上是乙個jvm程序中的乙個實現物件

主要有兩個核心功能:

負責執行組成spark應用的任務,並且將結果返回給驅動程序

它們通過自身的塊管理,為使用者程式中要求快取的rdd提供記憶體式儲存。rdd是直接快取在executor的程序內的,因此任務可以在執行時充分利用快取資料加速運算。

1.3 yarn cluster的模式

乙個類似於郵件的收發系統

資源的劃分在driver中,劃分好了之後就把資源傳送給executor中讓task執行

3.1 整個spark建立和執行的時序圖

3.2 job、stage和task

spark的任務排程總體來說分兩路進行,一路是stage級的排程,一路是task級的排程

sparkrdd通過其transactions操作,形成了rdd的血緣關係圖dag,最後通過action的呼叫,觸發了job並排程執行。dagscheduler負責stage級的排程,主要是將job切分成若干stage,並將每個stage打包成taskset交給taskscheduler排程。taskscheduler負責task級的排程,將dagscheduler給過來的taskset(放到任務池中)按照指定的排程策略分發到executor上執行,排程過程中schedulebackend負責提供可用資源,其中schedulerbackend有多種實現,分別對接不同的資源原理系統。

更加細緻一點的流程圖:

3.3 stage的劃分

乙個stage是否提交,需要判斷它的父stage是否執行,只有在父stage執行完畢後,才能執行當前的stage,如果沒有父stage,則就從該stage執行

3.4 task的排程

tasksetmanager負責監控管理同乙個stage中的tasks,taskscheduler就是以tasksetmanager為單位來排程任務的。tasksetmanager就是乙個taskset的封裝,把它封裝成這種形式來放入任務池中準備排程。

任務池中的排程方式有兩種:先進先出和公平排程。

在fair模式中有乙個rootpool和多個子pool,各個子pool中儲存著所有待分配的tasksetmanger。

在fair模式中,需要先對子pool進行排序,再對子pool裡面的tasksetmanager進行排序,兩者繼承同乙個scheduler,故使用同一種排序演算法。

3.5.1 shuffle和stage

在劃分stage時,最後乙個stage稱為finalstage,它本質上是乙個resultstage物件,前面所有stage被稱為shufflemapstage。

3.5.2 task的數量

資料在stage和stage之間要進行資料的儲存和讀寫,spark使用的就是sortshuffle。

這種方式只產生兩個檔案,乙個索引檔案,乙個資料檔案。檔案通過shuffle的過程(排序-溢寫-排序)來完成整個檔案的全排序。

Spark執行流程

四個步驟 1.構建dag 呼叫rdd上的運算元 2.dagscheduler將dag切分stage 切分的依據是shuffle 將stage中生成的task以taskset的形式給taskscheduler 3.taskscheduler排程task 根據資源情況將task排程到相應的executo...

Spark執行流程

參考博文 apache spark 是專為大規模資料處理而設計的快速通用的計算引擎。hadoop雖然已成為大資料技術的事實標準,但其本身還存在諸多缺陷,最主要的缺陷是其mapreduce計算模型延遲過高,無法勝任實時 快速計算的需求,因而只適用於離線批處理的應用場景。磁碟io開銷大。每次執行時都需要...

Spark的任務排程流程

client 提交應用,master節點啟動driver sparkcontext向clustermanager申請executor資源,worker會先例項化executorrunner物件,在executorrunner啟動中會建立程序生成器processbuilder,然後由該生成器建立coa...