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...