天天看點

Spark基本工作流程和作業排程

基本工作流程

Spark基本工作流程和作業排程
  1. Spark的應用分為任務排程和任務執行兩個部分
  2. 是以Spark程式都離不開SparkContext和Executor兩部分,Executor負責執行任務,運作Executor的機器稱為Worker節點,SparkContext由使用者程式啟動,通過資源排程子產品和Executor通信。SparkContext和Executor這兩部分在各種運作模式上是公用的。
  3. SparkContext是程式運作的總入口,在SparkContext的初始化過程中,會分别建立DAGScheduler作業排程和TaskScheduler任務排程兩個級别的排程子產品
  4. 作業排程子產品和具體的運作模式無關,它是根據shuffle來劃分排程階段,每個階段會建構出具體的任務,然後以TaskSets(任務組)的形式送出給任務排程子產品來具體執行
  5. 不同運作模式的差別主要展現在任務排程子產品,任務排程子產品負責啟動任務、監控任務和彙報任務的情況。(Standalone模式、Yarn模式等的差別主要展現在任務排程子產品這邊)

作業排程

作業排程關系圖

Spark基本工作流程和作業排程
  • Application(應用程式):Spark應用程式由一個或多個作業組成
  • Job(作業):由一個RDD Action 生成一個或多個排程階段所組成的一次計算作業
  • Stage(排程階段):一個任務集多對應的排程階段。Stage的劃分是根據寬依賴(shuffle操作)來劃分的
  • TaskSet(任務集):由一組關聯的,但互相之間沒有shuffle依賴關系的任務所組成的任務集
  • Task(任務):單個分區資料集上的最小處理流程單元

作業排程具體流程

Spark基本工作流程和作業排程
  1. 使用者送出程式(Application)建立SparkContext執行個體,SparkContext根據RDD對象生成DAG圖,将作業(Job)送出給DAGScheduler
  2. DAGScheduler将作業(Job)劃分成不同的Stage(從末端RDD開始,根據shuffle來劃分),每個Stage都是任務的集(TaskSet),以TaskSet為機關送出給TaskScheduler
  3. TaskScheduler管理任務(Task),并通過資料總管(Cluster Manager)[Standalone模式下是Master,Yarn模式下是ResourceManager]把任務(task)發給叢集中的Worker的Executor
  4. Worker接收到任務(Task),啟動Executor程序中的線程Task來執行任務(實際任務的運作最終由Executor類來執行,Executor對每一個任務建立一個TaskRunner類,交給線程池運作。)

繼續閱讀