Spark - [03] RDD概述

HOUHUILIN發表於2024-05-12

RDD,分散式資料集,是Spark中最基本的資料抽象。

一、什麼是RDD

RDD(Resilient Distributed Dataset)叫做分散式資料集,是 Spark 中最基本的資料抽象。

程式碼中是一個抽象類,它代表一個不可變、可分割槽、裡面的元素可平行計算的集合。

二、RDD的屬性

① 一組分割槽(Partition),即資料集的基本組成單位;
② 一個計算每個分割槽的函式;
③ RDD 之間的依賴關係;
④ 一個 Partitioner,即RDD的分片函式;
⑤ 一個列表,儲存存取每個 Partition 的優先位置(preferred location)

三、RDD的特點

RDD 表示只讀的分割槽的資料集,對RDD進行改動,只能透過 RDD 轉換操作,由一個RDD得到一個新的RDD,新的RDD包含了從其他RDD衍生所必需的資訊。

RDDs 之間存在依賴,RDD的執行是按照血緣關係延時計算的。如果血緣關係較長,可以透過持久化 RDD 來切斷血緣關係。

(1)分割槽

RDD 邏輯上是分割槽的,每個分割槽的資料是抽象存在的,計算的時候會透過一個 compute 函式得到每個分割槽的資料。

如果RDD是透過已有的檔案系統建立,則 compute 函式是讀取指定檔案系統中的資料,如果 RDD 是透過其他 RDD轉換而來,則 compute 函式是執行轉換邏輯將其他 RDD 的資料進行轉換。

Spark - [03] RDD概述

(2)只讀

RDD 是隻讀的,要想改變RDD中的資料,只能在現有的RDD基礎上建立新的RDD。

由一個 RDD 轉換到另一個 RDD,可以透過豐富的操作運算元實現,不再像 MapReduce 那樣只能寫 map 和 reduce

Spark - [03] RDD概述

RDD 的操作運算元包括兩類:

一類叫做transformations,它是用來將 RDD 進行轉化,構建 RDD 的血緣關係;

另一類叫做 actions,它是用來觸發 RDD 的計算,得到 RDD 的相關計算結果或者將 RDD 儲存到檔案系統中。

Spark - [03] RDD概述

(3)依賴

RDDs 透過操作運算元進行轉換,轉換得到的新 RDD 包含了 從其他 RDDs 衍生所必需的資訊,RDDs 之間維護著這種血緣關係,也稱之為依賴。

依賴包括兩種:

一種是窄依賴,RDDs 之間分割槽是一一對應的,

另一種是寬依賴,下游的RDD的每個分割槽與上游RDD(也稱之為父RDD)的每個分割槽都有關,是多對多關係。

Spark - [03] RDD概述

(4)快取

  如果在應用程式中多次使用同一個 RDD,可以將該RDD快取起來,該RDD只有在第一次計算的時候會根據血緣關係得到的分割槽的資料,在後續其他地方用到該RDD的時候,會直接從快取處而不用再根據血緣關係計算,這樣就加速後期的重用。

Spark - [03] RDD概述

(5)checkpoint

  雖然 RDD 的血緣關係天然地可以實現容錯,當 RDD 的某個分割槽資料失敗或丟失,可以透過血緣關係重建。但是對於長時間迭代型應用來說,隨著迭代的進行,RDDs 之間的血緣關係會越來越長,一旦在後續迭代過程中出錯,則需要透過非常長的血緣關係去重建,勢必影響效能。為此,RDD 支援 checkpoint 將資料儲存到持久化的儲存中,這樣就可以切斷之前的血緣關係,因為 checkpoint 後的RDD不需要知道它的父 RDDs了,它可以從 checkpoint 處 拿到資料。

— 要養成終身學習的習慣 —

相關文章