Spark-作業執行流程概述


Spark-作業執行流程概述

spark的作業和任務帶哦度系統是其核心,它能夠有效地進行調度根本原因是對任務划分DAG和容錯,使得它對底層到頂層的各個模塊之間的調用和處理顯的游刃有余。

相關術語

作業(job):RDD中由行動操作所生成的一個或多個調度階段

調度階段(stage):每個作業會因為RDD之間的依賴關系拆分成多組任務集合,稱為調度階段,也叫做任務集(TaskSet)。調度階段的划分是由DAGScheduler來划分的,調度階段有Shuffle Map StageResult Stage兩種。

任務(Task:分發到Executor上的工作任務,是spark實際執行應用的最小單元。

DAGSchedulerDAGScheduler是面向調度階段的任務調度器,負責接收spark應用提交的作業,根據RDD的依賴關系划分調度階段,並提交調度階段給TaskScheduler.

TaskSchedulerTaskScheduler是面向任務的調度器,它接受DAGScheduler提交過來的調度階段,然后把任務分發到work節點運行,由Worker節點的Executor來運行該任務

流程概述

1.spark應用程序進行各種轉換操作,通過行動操作觸發作業運行。提交之后根據RDD之間的依賴關系構建DAG圖,DAG圖提交給DAGScheduler進行解析。

2.DAGScheduler是面向調度階段的高層次的調度器,DAGSchedulerDAG拆分成相互依賴的調度階段,拆分階段是以RDD的依賴是否為寬依賴,當遇到寬依賴就划分為新的調度階段。每個調度階段包含一個或多個任務,這些任務形成任務集,提交給底層調度器TaskScheduler進行調度運行。DAGScheduler記錄哪些RDD被存入磁盤等物化操作,同時要尋求任務的最優化調度,例如:數據本地性等;DAGScheduler監控運行調度階段過程,如果某個調度階段運行失敗,則需要重新提交該調度階段。

3.每個TaskScheduler只為一個SparkContext實例服務,TaskScheduler接收來自DAGScheduler發送過來的任務集,TaskScheduler收到任務集后負責把任務集以任務的形式一個個分發到集群Worker節點的Executor中去運行。如果某個任務運行失敗,TaskScheduler要負責重試。另外,如果TaskScheduler發現某個任務一直未運行完,就可能啟動同樣的任務運行同一個任務,哪個任務先運行完就用哪個任務的結果。

4.Worker中的Executor收到TaskScheduler發送過來的任務后,以多線程的方式運行,每一個線程負責一個任務。任務運行結束后要返回給TaskScheduler,不同類型的任務,返回的方式也不同。ShuffleMapTask返回的是一個MapStatus對象,而不是結果本身;ResultTask根據結果的不同,返回的方式又可以分為兩類。

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM