Spark核心組件


Spark核心組件

1、RDD

resilient distributed dataset, 彈性分布式數據集。邏輯上的組件,是spark的基本抽象,代表不可變,分區化的元素集合,可以進行並行操作。該類封裝了RDD的基本操作,例如map、filter、persist等,除此以外,PairRDDFunctions封裝了KV類型RDD的操作,例如groupByKey和join。對於spark的KV類型RDD直接隱式轉換成PairRDDFunctions類,具備了byKey的操作。

RDD輕量級集合,內部沒有數據。內部,每個RDD具有5方面主要屬性:

  1. 分區列表
  2. 用於計算每個切片的函數(算法)
  3. 到其他RDD的依賴列表
  4. (可選)對於KV類型的RDD有一個分區類
  5. (可選)計算每個切片的首選位置列表

spark中所有的調度和執行都是基於這些方法,也允許每個RDD實現自己的計算方式。RDD的方法主要包含兩種類型Transformations和action。返回rdd都是變換,不會導致job的執行,延遲計算,延遲到action方法的調用。

1.1 transform

  • map
  • filter
  • mapValues
  • flatMap
  • reduceByKey
  • groupByKey
  • sortByKey

2、SparkContext

上下文創建時,在worker節點直接啟動job的執行器進程(CoarseGrainedExecutorBackend),spark入口點,表示到spark集群的一個連接。創建該類時,同時創建task調度器和后台調度器,后台調度器還要決定默認並發度問題。

3、DagScheduler

高級調度層,面向stage進行調度,為每個job計算stage,尋找最優路徑執行job。該調度器以taskset方式提交stage給下層調度器(TaskScheduler)。Spark以shuffle為邊界,將眾多的RDD划分成stage,窄依賴的RDD划分到一個stage中。shuffle依賴需要多個stage,DAG調度檢測運行task的首選位置,該調度器將位置信息和狀態傳遞給底層的task調度器。DAG調度器處理因shuffle output丟失導致故障,此時上一個stage需要重新提交。在階段stage內,不是由shuffle output丟失導致的故障都由下層的task調度器處理。緩存跟蹤,避免rdd重復計算。首選位置:首選那個節點來執行task。為了防止內存泄漏,job完成后清除數據結構。遞歸提交每個Stage,每個stage都是以Tasket方式提交任務集合給下層的TaskScheduler,因此Dag調度器需要計算每個stage的任務集合。提交的階段通過分區列表映射成Task集合,ShuffleMapStage對應ShuffleTask,ResultStage對應
ResultTask。

4、TaskSchedulerImpl

5、SchedulerBackend

6、job

activejob,提交給調度器的最頂層work單位,每個job可能需要多各stage的執行,並產生中間結果。

7、stage

stage是task的集合,數量同stage的最后的一個rdd的分區數相同。stage按照shuffle進行划分邊界,存在前后依賴,上一階段計算輸出,下一個提取上一個的結果。主要有兩種類型stage:

  1. ResultStage
    最后的階段,執行action。在RDD的某些分區上應用函數來計算action的結果。
  2. ShuffleMapStage
    產生map的output,stage如果重用了rdd,可以跨job共享。該階段是DAG圖計算過程中的中間階段,執行時保存輸出文件供reduce任務抓取,該階段可以單獨提交,DagScheduler.submitMapStage();

8、Task


免責聲明!

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



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