1. 程式人生 > >大數據技術學習:彈性分布式數據集RDD

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

clas 不但 哈希 數據丟失 一個 流水線 res 基於 spark

今天給大家分享的技術學習是:淺談彈性分布式數據集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的簡單總結,更多精彩技術分享,歡迎持續關註~

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