RDD運行原理------學習筆記

RDD實現管道化,避免中間數據存儲;

RDD:是一個分佈式對象集合,本質上是一個只讀的分區記錄集合,每個RDD可分成多個分區,每個分區就是一個數據集片段,並且一個RDD的不同分區可以被保存到集羣中不同的節點上,從而可以在集羣中的不同節點上進行並行計算;

轉換(Transformation):map、join、groupby、filter等;粗粒度修改;不適合網頁爬蟲;實際上RDD已經被實踐證明可以高效地表達許多框架的編程模型(比如MapReduce、SQL、Pregel);

動作(Action):最夠一步得出結果;

RDD執行過程:

RDD讀入外部數據源進行創建
RDD經過一系列的轉換(Transformation)操作,每一次都會產生不同的RDD,供給下一個轉換操作使用

最後一個RDD經過“動作”操作進行轉換,並輸出到外部數據源 

這一系列處理稱爲一個Lineage(血緣關係),即DAG拓撲排序的結果

優點:惰性調用、管道化、避免同步等待、不需要保存中間結果、每次操作變得簡單


RDD特點:

1、高效容錯性:血緣關係、重新計算丟失分區、無需回滾系統、重算過程在不同節點之間並行、只記錄粗粒度的操作;

(傳統:數據複製或者記錄日誌,代價高)

2、中間結果持久化到內存;

3、避免對象序列化和反序列化;

寬依賴:父:子:1:N;

窄依賴:父:子:1:1;N:1;

寬斷窄加,實現流水線計算;

Stage的劃分:

ShuffleMapStage:不是最終的Stage,在它之後還有其他Stage,所以,它的輸出一定需要經過Shuffle過程,並作爲後續Stage的輸入;這種Stage是以Shuffle爲輸出邊界,其輸入邊界可以是從外部獲取數據,也可以是另一個ShuffleMapStage的輸出,其輸出可以是另一個Stage的開始;在一個Job裏可能有該類型的Stage,也可能沒有該類型Stage;

ResultStage:最終的Stage,沒有輸出,而是直接產生結果或存儲。這種Stage是直接輸出結果,其輸入邊界可以是從外部獲取數據,也可以是另一個ShuffleMapStage的輸出。在一個Job裏必定有該類型Stage。

因此,一個Job含有一個或多個Stage,其中至少含有一個ResultStage。


(1)創建RDD對象;
(2)SparkContext負責計算RDD之間的依賴關係,構建DAG;
(3)DAGScheduler負責把DAG圖分解成多個Stage,每個Stage中包含了多個Task,每個Task會被TaskScheduler分發給各個WorkerNode上的Executor去執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章