spark-Job,stage,Task等一些基本概念


Spark 將任務以 shuffle 依賴(寬依賴)為邊界打散,划分多個 Stage. 最后的結果階段叫做 ResultStage, 其它階段叫 ShuffleMapStage.

  • 1.從后往前推理,遇到寬依賴就斷開,遇到窄依賴就把當前RDD加入到該Stage
  • 2.每個Stage里面Task的數量是由該Stage中最后一個RDD的Partition的數量所決定的。
  • 3.最后一個Stage里面的任務類型是ResultTask,前面其他所有的Stage的任務類型是ShuffleMapTask。
  • 4.代表當前Stage的算子一定是該Stage的最后一個計算步驟

計算原理

 

      spark一些概念:

         Driver:使用 Driver 這一概念的分布式框架很多,比如 Hive 等。 Spark 中的 Driver 即運行 Application 的 main() 函數並創建SparkContext,創建 SparkContext 的目的是為了准備 Spark 應用程序的運行環境。在 Spark 中由 SparkContext 負責與ClusterManager 通信,進行資源的申請、任務的分配和監控等。當 Executor 部分運行完畢后,Driver 同時負責將 SparkContext 關閉。通常用 SparkContext 代表 Driver 。
       
        Executor:某個 Application 運行在 Worker 節點上的一個進程,該進程負責運行某些 Task,並且負責將數據存在內存或者磁盤上,每個 Application 都有各自獨立的一批 Executor。 在 Spark on Yarn 模式下它負責將 Task 包裝成 taskRunner ,並從線程池抽取出一個空閑線程運行 Task。
 
        Worker:集群中任何可以運行 Application 代碼的節點。在 Standalone 模式中指的就是通過 slave 文件配置的 Worker 節點,在 Spark on Yarn 模式中指的就是 NodeManager 節點。
 
       Task:被送到某個 Executor 上的工作單元,和 Hadoop MapReduce 中的 MapTask 和 ReduceTask 概念一樣,是運行Application 的基本單元,代表單個數據分區上的最小處理單元。Task 分為 ShuffleMapTask 和 ResultTask 兩類。ShuffleMapTask 執行任務並把任務的輸出划分到 (基於 task 的對應的數據分區) 多個 bucket(ArrayBuffer) 中,ResultTask 執行任務並把任務的輸出發送給驅動程序。多個 Task 組成一個 Stage,而 Task 的調度和管理等由下面的 TaskScheduler 負責。
 
      TaskSet:代表一組相關聯的沒有 shuffle 依賴關系的任務組成任務集。一組任務會被一起提交到更加底層的 TaskScheduler 進行管理。
 
      Stage:Job 被確定后,Spark 的調度器 (DAGScheduler) 會根據該計算作業的計算步驟把作業划分成一個或者多個 Stage。Stage 又分為 ShuffleMapStage 和 ResultStage,每一個 Stage 將包含一個 TaskSet。
 
      Job:Spark 的計算操作是 lazy 執行的,只有當碰到一個動作 (Action) 算子時才會觸發真正的計算。一個 Job 就是由動作算子而產生包含一個或多個 Stage 的計算作業。
 
      Cluster Manager:指的是在集群上獲取資源的外部服務,目前有三種類型:
Standalone:Spark 原生的資源管理,由 Master 負責資源的分配。

Apache Mesos:與 Hadoop MapReduce 兼容性良好的一種資源調度框架。

Hadoop Yarn:主要是指的 Yarn 中的 ResourceManager。

 

      DAGScheduler:根據 Job 構建基於 Stage 的 DAG,並提交 Stage 給 TaskScheduler。其划分 Stage 的依據是 RDD 之間的依賴關系,根據 RDD 和 Stage 之間的關系找出開銷最小的調度方法,然后把 Stage 以 TaskSet 的形式提交給 TaskScheduler。此外,DAGScheduler 還處理由於 Shuffle 數據丟失導致的失敗,這有可能需要重新提交運行之前的 Stage(非 Shuffle 數據丟失導致的 Task 失敗由 TaskScheduler 處理)。
 
     TaskScheduler:將 Taskset 提交給 Worker(集群)運行,每個 Executor 運行什么 Task 就是在此處分配的。TaskScheduler 還維護着所有 Task 的運行狀態,重試失敗的 Task


免責聲明!

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



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