天天看點

【SparkCore】 RDD介紹

  • 介紹

RDD(Resilient Distributed Dataset)叫做彈性分布式資料集,是Spark中最基本的資料抽象,代表一個不可變、可分區、裡面的元素可并行計算的集合。

單詞拆解

Resilient :它是彈性的,RDD中的資料可以儲存在記憶體中或者磁盤裡面

Distributed :它裡面的元素是分布式存儲的,可以用于分布式計算

Dataset: 它是一個集合,可以存放很多元素

  • RDD的主要屬性

A list of partitions :

一組分片(Partition)/一個分區(Partition)清單,即資料集的基本組成機關。對于RDD來說,每個分片都會被一個計算任務處理,分片數決定并行度。使用者可以在建立RDD時指定RDD的分片個數,如果沒有指定,那麼就會采用預設值(2)。

A function for computing each split :

一個函數會被作用在每一個分區。Spark中RDD的計算是以分區為機關的,compute函數會被作用到每個分區上

A list of dependencies on other RDDs:

一個RDD會依賴于其他多個RDD。RDD的每次轉換都會生成一個新的RDD,是以RDD之間就會形成類似于流水線一樣的前後依賴關系。在部分分區資料丢失時,Spark可以通過這個依賴關系重新計算丢失的分區資料,而不是對RDD的所有分區進行重新計算。(Spark的容錯機制)

Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned):

Spark中的分區函數,一個是基于哈希的HashPartitioner,另外一個是基于範圍的RangePartitioner。對于KV類型的RDD會有一個Partitioner函數,即RDD的分區函數(可選項)隻有對于key-value的RDD,才會有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函數決定了RDD本身的分區數量,也決定了parent RDD Shuffle輸出時的分區數量。

Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file):

一個清單,存儲每個Partition的位置(preferred location),對于一個HDFS檔案來說,這個清單儲存的就是每個Partition所在的塊的位置。按照"移動資料不如移動計算"的理念,Spark在進行任務排程的時候,會盡可能選擇那些存有資料的worker節點來進行任務計算。

總結:

RDD 是一個資料集,不僅表示了資料集,還表示了這個資料集從哪來,如何計算。主要屬性包括

1.多分區

2.計算函數

3.依賴關系

4.分區函數(預設是hash)

5.最佳位置

繼續閱讀