1. 程式人生 > 其它 >大資料開發之SparkCore中RDD特點

大資料開發之SparkCore中RDD特點

什麼是RDD

RDD(Resilient Distributed Dataset)叫做彈性分散式資料集,是Spark中最基本的資料抽象。程式碼中是一個抽象類,它代表一個彈性的、不可變、可分割槽、裡面的元素可平行計算的集合。

RDD的屬性

(1)一組分割槽(Partition),即資料集的基本組成單位;

(2)一個計算每個分割槽的函式;

(3)RDD之間的依賴關係;

(4)一個Partitioner,即RDD的分片函式;

(5)一個列表,儲存存取每個Partition的優先位置(preferred location)。

RDD特點

RDD表示只讀的分割槽的資料集,對RDD進行改動,只能通過RDD的轉換操作,由一個RDD得到一個新的RDD,新的RDD包含了從其他RDD衍生所必需的資訊。RDDs之間存在依賴,RDD的執行是按照血緣關係延時計算的。如果血緣關係較長,可以通過持久化RDD來切斷血緣關係。

1 彈性

儲存的彈性:記憶體與磁碟的自動切換;

容錯的彈性:資料丟失可以自動恢復;

計算的彈性:計算出錯重試機制;

分片的彈性:可根據需要重新分片。

2 分割槽

RDD邏輯上是分割槽的,每個分割槽的資料是抽象存在的,計算的時候會通過一個compute函式得到每個分割槽的資料。如果RDD是通過已有的檔案系統構建,則compute函式是讀取指定檔案系統中的資料,如果RDD是通過其他RDD轉換而來,則compute函式是執行轉換邏輯將其他RDD的資料進行轉換。

3 只讀

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

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

RDD的操作運算元包括兩類,一類叫做Transformations,它是用來將RDD進行轉化,構建RDD的血緣關係;另一類叫做Actions,它是用來觸發RDD的計算,得到RDD的相關計算結果或者將RDD儲存的檔案系統中。下圖是RDD所支援的操作運算元列表。

4 依賴

RDDs通過操作運算元進行轉換,轉換得到的新RDD包含了從其他RDDs衍生所必需的資訊,RDDs之間維護著這種血緣關係,也稱之為依賴。如下圖所示,依賴包括兩種,一種是窄依賴,RDDs之間分割槽是一一對應的,另一種是寬依賴,下游RDD的每個分割槽與上游RDD(也稱之為父RDD)的每個分割槽都有關,是多對多的關係。

5 快取

如果在應用程式中多次使用同一個RDD,可以將該RDD快取起來,該RDD只有在第一次計算的時候會根據血緣關係得到分割槽的資料,在後續其他地方用到該RDD的時候,會直接從快取處取而不用再根據血緣關係計算,這樣就加速後期的重用。如下圖所示,RDD-1經過一系列的轉換後得到RDD-n並儲存到hdfs,RDD-1在這一過程中會有個中間結果,如果將其快取到記憶體,那麼在隨後的RDD-1轉換到RDD-m這一過程中,就不會計算其之前的RDD-0了。

6 CheckPoint

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

轉載原文連結:http://www.atguigu.com/jszy/28616.html