天天看點

spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程

圖檔

  • 一. 概念
  • 二. 作業排程流程
  • 三. Spark運作架構具有以下特點
  • 四. spark 詳細運作過程
      • 1)
      • 2)
      • 3)

一. 概念

一個Application由一個Driver和若幹個Job構成,

一個Job由多個Stage構成,

一個Stage由多個沒有Shuffle關系的Task組成(多個RDD算子操作)

stage:寬窄依賴劃分

當執行一個Application時,Driver會向叢集管理器申請資源,啟動Executor,并向Executor發送應用程式代碼和檔案,然後在Executor上執行Task,運作結束後,執行結果會傳回給Driver,或者寫到HDFS或者其他資料庫中.

二. 作業排程流程

spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
  1. 建構Spark Application的運作環境(啟動SparkContext),SparkContext向資料總管(可以是Standalone、Mesos或YARN)注冊并申請運作Executor資源;
  2. 資料總管配置設定Executor資源并啟動StandaloneExecutorBackend,Executor運作情況将随着心跳發送到資料總管上;
  3. SparkContext建構成DAG圖,将DAG圖分解成Stage,并把Taskset發送給Task Scheduler。Executor向SparkContext申請Task
  4. Task Scheduler将Task發放給Executor運作同時SparkContext将應用程式代碼發放給Executor。
  5. Task在Executor上運作,運作完畢釋放所有資源。

三. Spark運作架構具有以下特點

(1)每個Application擷取專屬的executor程序,該程序在Application期間一直駐留,并以多線程方式運作tasks。這種Application隔離機制有其優勢的,無論是從排程角度看(每個Driver排程它自己的任務),還是從運作角度看(來自不同Application的Task運作在不同的JVM中)。當然,這也意味着Spark Application不能跨應用程式共享資料,除非将資料寫入到外部存儲系統。

(2)Spark與資料總管無關,隻要能夠擷取executor程序,并能保持互相通信就可以了。

(3)送出SparkContext的Client應該靠近Worker節點(運作Executor的節點),最好是在同一個Rack裡,因為Spark Application運作過程中SparkContext和Executor之間有大量的資訊交換;如果想在遠端叢集中運作,最好使用RPC将SparkContext送出給叢集,不要遠離Worker運作SparkContext。

(4)Task采用了資料本地性和推測執行的優化機制。

四. spark 詳細運作過程

1)

spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
  1. Driver程式的代碼運作到action操作,觸發了SparkContext的runJob方法。
  2. SparkContext調用DAGScheduler的runJob函數。
  3. DAGScheduler把Job劃分stage,然後把stage轉化為相應的Tasks,把Tasks交給TaskScheduler。
  4. 通過TaskScheduler把Tasks添加到任務隊列當中,交給SchedulerBackend進行資源配置設定和任務排程, 每個tasks就有多個Threads, 在worker中process(運作)。
  5. 排程器給Task配置設定執行Executor,ExecutorBackend負責執行Task。Executor執行結束後,回傳給Driver,把執行結果存儲到本地或hdfs上

2)

spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
  1. Driver程式的代碼運作到action操作,觸發了SparkContext的runJob方法。
  2. SparkContext調用DAGScheduler的runJob函數。
  3. DAGScheduler把Job劃分stage,然後 DAGScheduler把Job送出stage,DAGScheduler把stage轉化為相應的TaskSet,把TaskSet交給TaskScheduler。
  4. 通過TaskScheduler把Tasks添加到任務隊列當中,并把計算任務送出給排程器SchedulableBuilder
  5. 排程器SchedulableBuilder排程任務TaskScheduler
  6. TaskScheduler為task配置設定任務資源,并送出tasks給SchedulerBackend
  7. 交給SchedulerBackend進行資源配置設定和任務排程, 将任務送出到Executor上運作, 在Executor(worker)中process(運作)。
  8. 排程器給Task配置設定執行Executor,ExecutorBackend負責執行Task。Executor執行結束後,回傳給Driver,把執行結果存儲到本地或hdfs上

3)

spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
  1. 我們送出一個任務,任務就叫Application

    初始化程式的入口SparkContext,

      1.1 初始化DAG Scheduler

      1.2 初始化Task Scheduler

  2. Task Scheduler中的ClientEndpoint向master去進行注冊并申請資源(CPU Core和Memory)
  3. Master根據SparkContext的資源申請要求和Worker心跳周期内報告的資訊決定在哪個Worker上配置設定資源,然後在該Worker上擷取資源,然後啟動StandaloneExecutorBackend;順便初始化好了一個線程池,通知worker啟動Executor
  4. StandaloneExecutorBackend向Driver(SparkContext)注冊,這樣Driver就知道哪些Executor為他進行服務了。

      到這個時候其實我們的初始化過程基本完成了,我們開始執行transformation的代碼,但是代碼并不會真正的運作,直到我們遇到一個action操作。生産一個job任務,進行stage的劃分

  5. 發送任務到Executor進行執行

    5.1 SparkContext将Applicaiton代碼發送給Standalone ExecutorBackend;并且SparkContext解析Applicaiton代碼,建構DAG圖,并送出給DAG Scheduler分解成Stage(當碰到Action操作時,就會催生Job;每個Job中含有1個或多個Stage,Stage一般在擷取外部資料和shuffle之前産生)。

    5.2 将Stage(或者稱為TaskSet)送出給Task Scheduler。Task Scheduler負責将Task配置設定到相應的Worker,最後送出給StandaloneExecutorBackend執行;

    5.3 對task進行序列化,并根據task的配置設定算法,配置設定task

    5.4 對接收過來的task進行反序列化,把task封裝成一個線程

  6. 開始執行Task,并向SparkContext報告,回報任務狀态給Driver
  7. APPlication程式運作完畢後,回收資源
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程
spark core 作業排程一. 概念二. 作業排程流程三. Spark運作架構具有以下特點四. spark 詳細運作過程

繼續閱讀