1. 程式人生 > >Spark RDD(Resilient Distributed Dataset)

Spark RDD(Resilient Distributed Dataset)

com hdf 函數式 set 分享圖片 strong .cn 任務 apr

基於數據集的處理:從物理存儲上加載數據,然後操作數據,然後寫入物理存儲設備。比如Hadoop的MapReduce。
缺點:1.不適合大量的叠代 2. 交互式查詢 3. 不能復用曾經的結果或中間計算結果

基於工作集的處理:如Spark的RDD。
RDD具有如下的彈性:

1. 自動的進行內存和磁盤數據存儲的切換
2. 基於Lineage的高效容錯
3. Task如果失敗會自動進行特定次數的重試
4. Stage如果失敗會自動進行特定次數的重試,而且只會計算失敗的分片
5. Checkpoint和persist (用於計算結果復用)
6. 數據分片的高度彈性


RDD的寫操作是粗粒度的,讀操作既可以是粗粒度的也可以是細粒度的.

RDD是分布式函數式編程的抽象。

RDD通過記錄數據更新的方式為何高效?

1. RDD是不可變的 + lazy

創建RDD的幾種方式:1. 程序中的集合(主要用於測試) 2. 使用本地文件系統(主要用於測試較大量的數據) 3. 使用HDFS 4. 基於DB。5. 基於S3 6. 基於數據流

RDD 依賴分為寬依賴和窄依賴

技術分享圖片

1. 窄依賴是指每個父RDD的Partition最多被子RDD的一個Partition使用。例如:map, filter等會產生窄依賴

2. 寬依賴是指一個父RDD的Partition會被多個子RDD的Partition使用。例如:groupByKey,reduceByKey等會產生寬依賴

寬依賴會產生Shuffle

特別說明:對於join操作有兩種情況,如果說join的時候,每個Partition僅僅和已知的Partition進行join,則此時的join操作就是窄依賴;其它情況是寬依賴.

窄依賴不僅包含一對一的窄依賴,還包含一對固定個數的窄依賴(也就是說對父RDD的依賴的Partition的數量不會隨著RDD數據規模的改變而改變)

Stage的劃分:

技術分享圖片

1. 從後往前推,遇到寬依賴就斷開,遇到窄依賴就把當前RDD加入到Stage中

2. 每個Stage裏面的Task的數量是由該Stage中最後一個RDD的Partition的數量所決定的。

3. 最後一個Stage裏面的任務類型是ResultTask,前面其它所有的Stage裏面的任務的類型是ShuffleMapTask

Spark RDD(Resilient Distributed Dataset)