天天看點

Yarn的排程器, Spark的任務排程, DAGSchedule, TaskSchedule, worder 131. 複習, Yarn三種排程器2. Spark任務排程

1. 複習, Yarn三種排程器

1.1 什麼是排程器

主要是用于研究一個任務送出之後,下一個任務又來了改怎麼執行. 絕對我們任務如何進行執行.

1.2 Yarn當中的排程器主要有三種

  • 第一種:隊列排程器FIFO: 第一個任務送出,先執行.然後第二個任務送出,等着第一個任務執行完畢之後再執行第二個任務.

    第一個任務: 大任務, 需要運作4個小時

    第二個任務: 小任務, 需要運作3分鐘.

    Yarn的排程器, Spark的任務排程, DAGSchedule, TaskSchedule, worder 131. 複習, Yarn三種排程器2. Spark任務排程

    這種排程器沒人用了,不管是apache軟體的版本,還是CDH軟體的版本.

    hadoop1.x使用的是這種版本的排程器

  • 第二種排程器: capacity Scheduler容量排程器, apache的版本預設使用的排程器.
    • 優點: 将整個資源,換分為好多塊.

      根據我們送出的任務需要資源的大小,将我們的任務,劃分到不聽的資源隊列裡面去,可以允許多個任務并行的快速的執行

    • 缺點: 将資源給劃散了.
      Yarn的排程器, Spark的任務排程, DAGSchedule, TaskSchedule, worder 131. 複習, Yarn三種排程器2. Spark任務排程
  • 第三種排程器: Fair Scheduler公平排程器, CDH的軟體預設使用的排程器.

    第一個任務送出: 将所有的資源全部配置設定給第一個任務,保證第一個任務最快的完成.

    第二個任務送出: 從第一個任務當中劃分一部分資源出來, 給第二個任務進行執行.

    • 優點: 可以快速的執行我們的一些大任務
    • 缺點: 造成資源頻繁的配置設定.
      Yarn的排程器, Spark的任務排程, DAGSchedule, TaskSchedule, worder 131. 複習, Yarn三種排程器2. Spark任務排程

2. Spark任務排程

Spark任務排程模式是FIFO

各個RDD之間存在着依賴關系,這些依賴關系就形成有向無環圖DAG,DAGScheduler對這些依賴關系形成的DAG進行Stage劃分,劃分的規則很簡單,從後往前回溯,遇到窄依賴加入本stage,遇見寬依賴進行Stage切分。完成了Stage的劃分。DAGScheduler基于每個Stage生成TaskSet,并将TaskSet送出給TaskScheduler。TaskScheduler 負責具體的task排程,最後在Worker節點上啟動task。

Yarn的排程器, Spark的任務排程, DAGSchedule, TaskSchedule, worder 131. 複習, Yarn三種排程器2. Spark任務排程
  • 首先,RDD Objects劃分成DAG(有向無環圖)

    各個RDD之間存在着依賴關系, 這些依賴關系就形成有向無環圖DAG.

  • DAG Scheduler 職能如下
    • 劃分DAG成多個stage, 每個stage會形成一個taskSet.
    • 記錄緩存的RDD血統.
    • 送出taskSet到Task Scheduler(不同模式有不聽的底層任務排程器)

      a. Spark-Cluster模式下是TaskScheduler

      b. Yarn-Cluster模式下是YarnClusterScheduler

      c. Yarn-Client模式下是YarnClientClusterScheduler

    • 重新送出丢失的stage到TaskScheduler
  • Task Scheduler(不知道stage是哪一部分RDD的資料)
    • 每個TaskSet(Stage)生成一個taskManager
    • 決定task任務執行的最佳位置
    • 推測執行,哪些任務執行慢,就停止這些任務重新到新節點上執行
    • 送出一組taskSet(tasks) + 參數
    • 将丢失的taskSet重新送出給DAG Scheduler ==> 隊列FIFO的原則執行推過來的stage.
  • worker 是真正的執行任務的節點
    • 每個分區開啟一個程序(executor)
    • 每個executor中, 開啟一組線程, 執行一組taskSet, 每個task就是一個線程
    • 實時報告metrics給老大
    • 将計算結果傳回給driver.

繼續閱讀