RDD的基本原理

RDD(Resilient Distributed Dataset,也叫分佈式彈性數據集)是Spark的核心抽象,在實現層面,RDD是一個抽象類,每種RDD都須要實現這個接口,因此Spark有多種RDD,每種RDD的實現方式都不相同。數組

本文描述了RDD的基本概念和RDD的性質,每種性質的實現會後面的文章詳細介紹。緩存

概述

(Resilient Distributed Dataset) 彈性分佈式數據集,又稱RDD,是spark中數據的基本抽象,它是spark的核心。最先的rdd的設計思想能夠參考論文:可伸縮性分佈式數據集(Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing)。它表明一個能夠並行操做的,不可修改的,分區元素的集合。網絡

一個RDD是一個彈性的分佈式記錄集,它分佈在一個或多個分區上。(能夠把RDD和scala的collections 進行類比,不過scala的collections是在單個jvm上,而RDD是分佈在多個執行節點上。)框架

Spark的RDD隱藏數據分區和數據分佈,所以可使用高級語言設計並行的計算框架。jvm

RDD的基本特性

  • 彈性(Resilient)(容錯性)分佈式

經過RDD血緣關係圖(RDD lineage graph)來保證容錯性。當因爲節點宕機而致使計算失敗,能夠經過RDD的血緣關係圖來從新計算丟失和損壞的分區。ide

  • 分佈式(Distributed)函數

數據分佈在集羣的多個節點上。在計算RDD數據時,也會在多個節點上進行計算。優化

  • 不可變(Immutable)lua

RDD的數據一旦建立就不能修改,只能經過Transformations操做來建立新的RDD。

RDD的其餘特性

RDD除了介紹的基本特性,RDD還具備如下特性:

  • 數據集(Dataset)

多個RDD能夠構成一個數據集。數據集也是多個分區的集合,這些數據多是主類型的值,或者是值的值。好比字符串的RDD,或者是數組的RDD。

  • 基於內存的(In-Memory)

RDD的數據儘量多、儘量長時間的保存在內存中。

  • 懶評估(Lazy evaluated)

RDD提供了兩種類型的操做,一種操做叫:Transformation(轉換);另外一種叫:Action(動做)。當調用RDD的Transformation操做函數時不會當即執行,直到調用Action函數纔開始執行。(RDD的這兩種操做會在後面的文章中專門介紹)

  • 能夠持久化

RDD的數據能夠保存在緩存中,也能夠持久化到硬盤。RDD提供了多種存儲級別,包括:內存,磁盤,還能夠在存儲RDD時對RDD進行序列化操做。

  • 並行(Parallel)

RDD的數據處理是並行的。因爲RDD的數據分佈在多個節點上,這種性質決定了它能夠並行執行數據處理任務。

  • 分區的(Partitioned)

RDD的數據是分區的,數據被分佈在集羣的多個節點上。

  • RDD是有的類型(Typed)

每一個RDD都是有類型的,好比:RDD[Long]中的Long類型,RDD[(Int,String)]中的(Int, String)類型。

  • 本地粘性

RDD能夠定義首選的位置,讓計算過程儘量接近數據分區所在的位置。

  • 相互依賴

調用一個RDD的Transformation操做時會生成新的RDD,新生成的RDD和來源RDD就有了依賴關係。而多個Transformation操做就造成了一個依賴的DAG圖(有向無環圖)。當這個DAG圖上某個RDD的數據丟失或損壞時,能夠根據該DAG圖爲依據來從新計算。

  • 其餘說明

在RDD中,分區的計算被設計成一個分佈式的過程,是爲了實現數據的均勻分佈以及利用數據本地化(如HDFS分佈式系統的數據分區)。

分區是並行處理的單元,你能夠經過從新分區(repartition)或合併轉換(coalesce)來控制分區的數量。Spark試圖儘量靠近須要訪問的數據,而不浪費時間經過RDD shuffling發送數據在網絡上,建立的分區儘量和存儲系統的保持一致,從而優化數據訪問。

RDD的操做類型

RDD支持兩種操做:

  1. Transformations(轉換)

RDD的轉換操做由RDD的轉換函數來實現,它們是懶操做函數(lazy operations functions),用來建立另外一個RDD。之因此是lazy的,是因爲,當調用它們時不會當即執行,只有等到actions函數執行時,才被執行。

  1. Actions(動做/操做)

當調用RDD的action函數時,將會觸發計算,並返回計算結果。

小結

本文介紹了spark RDD的基本概念和RDD的特性。經過本文介紹應該對Spark的核心:RDD,有一個比較全面的瞭解。後面的文章會對這些特性的原理進行分析。

相關文章
相關標籤/搜索