大數據技術學習:彈性分佈式數據集RDD

今天千鋒老師給大家分享的技術學習是:淺談彈性分佈式數據集RDD。

一、RDD定義

RDD(Resilient Distributed Dataset)叫做分佈式數據集,是Spark中基本的數據抽象,它代表一個不可變(數據和元數據)、可分區、裡面的元素可並行計算的集合。其特點在於自動容錯,位置感知性調度和可伸縮性。

大數據技術學習:彈性分佈式數據集RDD

二、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 -> 記錄計算過程(記錄參數,計算方法)

大數據技術學習:彈性分佈式數據集RDD

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

大數據技術學習:彈性分佈式數據集RDD

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


分享到:


相關文章: