目錄
spark排程解析
1.相關術語
2.作業、階段、任務之間的關係
如何劃分作業(job)
如何劃分階段(stage)
如何劃分任務(task) 總結
3.spark執行流程
參考文獻
driver通常用sparkcontext代表driver;
cluster manager:指的是在集群上獲取資源的外部服務,目前有:
a. standalone:spark原生的資源管理,由master負責資源的分配;
b. hadoop yarn:由yarn中的resourcemanager負責資源的分配;
作業(job):包含多個task組成的平行計算,往往由spark action催生,乙個job包含多個rdd及作用於相應rdd上的各種operation;
階段(stage):每個job會被拆分很多組task,每組任務被稱為stage,也可稱taskset,乙個作業分為多個階段;
任務(task): 被送到某個executor上的工作任務
rdd提供了一組豐富的操作來支援常見的資料運算,他們分為行動(action)和轉換(transformation)兩類。前者用來執行計算並且輸出,後者指定rdd之間的依賴關係。
說得具體一點就是,轉換操作(如map、filter、groupby、join等)的輸入是乙個rdd,輸出也是乙個rdd,這樣就建立了兩個rdd之間的依賴,而在spark中轉換(transformation)是延遲執行的,也就是說轉換並不立即執行;而行動操作(如count、collect)的輸入是rdd,但是輸出是非rdd形式,也就是資料結果集合,而action操作會立即執行。
rdd中不同的操作會使得不同的rdd分割槽中產生不同的依賴。它們分為窄依賴(narrow dependency)和寬依賴(wide dependency)。
如下圖所示,其中乙個大矩形表示乙個rdd,rdd中的小矩形表示乙個partition分割槽。豎線左邊為窄依賴,右邊為寬依賴。
簡單的說,如果父rdd中的分割槽partition與子rdd中的分割槽的關係是一對一或多對一的關係,則為窄依賴,否則為寬依賴。而在job中,遇到寬依賴,就會劃分一下階段。
dag優化:乙個job會被切分為多個stage,碰到寬依賴就會切分一下。
劃分了階段後,就可以保證stage1和stage2中rdd之間都是窄依賴,這樣分割槽之間的操作可以形成乙個流水線(pipeline)操作,spark會將每條pipeline封裝成乙個任務(task),就比如上圖中stage2中存在4個task,c到d中第乙個分割槽執行完map操作,不用等待第二個分割槽執行完map操作,直接可以立即執行union操作,能夠大大提高計算效率。
(1)建立rdd物件。
(2)sparkcontext負責計算rdd之間的依賴關係,劃分job,構建dag。這個過程都是在driver上完成。
(3) dagscheduler負責將dag圖分解成多個stage,每個stage中包含多個task,然後每個task會被任務排程器分發給各個worker上去被executor執行。
詳細過程都在圖上了,有點潦草,將就著看。^_^
[1][2]大資料技術原理與應用(第二版,人民郵電出版社)
spark深度解析 排程演算法
private def schedule 作用就是把集合隨機打亂 取出workers中所有之前註冊的worker,進行過濾,必須 狀態 是alive的worker 把worker隨機的打亂 val shuffledaliveworkers random.shuffle workers.toseq.f...
Spark執行時程式排程解析
1,spark應用程式會在乙個物理節點上有驅動程式 driver 2,驅動程式 driver 會分發每個tasks到worker節點 3,worker節點就會返回result到dirver節點 1,分布式檔案系統 file system 載入資料集 rdd 2,transformations延遲執行...
Spark作業排程
spark在standalone模式下,預設是使用fifo的模式,我們可以使用spark.cores.max來設定它的最大核心數,使用spark.executor.memory 來設定它的記憶體。在yarn模式下,使用 num workers設定worker的數量,使用 worker memory設...