1. 程式人生 > >大資料技術學習:彈性分散式資料集RDD

大資料技術學習:彈性分散式資料集RDD

今天給大家分享的技術學習是:淺談彈性分散式資料集RDD。

一、RDD定義

RDD(Resilient Distributed Dataset)叫做分散式資料集,是Spark中基本的資料抽象,它代表一個不可變(資料和元資料)、可分割槽、裡面的元素可平行計算的集合。其特點在於自動容錯,位置感知性排程和可伸縮性。

二、RDD的屬性

1、一組分片。即資料集的基本組成單位。對於RDD來說,每個分片都會被一個計算任務處理,並決定平行計算的粒度。使用者可以在建立RDD時指定RDD的分片個數,如果沒有指定,那麼就會採用預設值。預設值就是程式所分配到的CPU Core的數目。

2、一個計算每個分割槽的函式。Spark中RDD的計算是以分片為單位的,每個RDD都會實現compute函式以達到這個目的。compute函式會對迭代器進行復合,不需要儲存每次計算的結果。

3、RDD之間的依賴關係。RDD的每次轉換都會生成一個新的RDD,所以RDD之間就會形成類似於流水線一樣的前後依賴關係。這裡要提及一個概念——容錯處理:,即在部分分割槽資料丟失時,Spark可以通過這個依賴關係重新計算丟失的分割槽資料,而不是對RDD的所有分割槽進行重新計算。

4、一個Partitioner,分割槽器。即RDD的分片函式。當前Spark中實現了兩種型別的分片函式,一個是基於雜湊的HashPartitioner,另外一個是基於範圍的RangePartitioner。只有對於key-value的RDD,才會有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函式不但決定了RDD本身的分片數量,也決定了parent RDD Shuffle輸出時的分片數量。

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

對於一個HDFS檔案來說,這個列表儲存的就是每個Partition所在的塊的位置。按照"移動資料不如移動計算"的理念,Spark在進行任務排程的時候,會盡可能地將計算任務分配到其所要處理資料塊的儲存位置。

三、RDD型別

1、Transformation -> 記錄計算過程(記錄引數,計算方法)

2、Action -> 觸發生成job(一個job對應一個action運算元)

以上就是對RDD的簡單總結,更多精彩技術分享,歡迎持續關注~