1. 程式人生 > >spark2原理分析-RDD基本原理分析

spark2原理分析-RDD基本原理分析

概述

RDD是spark的基礎,本文描述了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是分佈在多個jvm上。)

spark的rdd隱藏資料分割槽和資料分佈,因此可以使用高階語言設計並行的計算框架。

RDD的基本特性

  • 彈性(Resilient)(容錯性)

通過RDD血緣關係圖(RDD lineage graph)來保證容錯性。當由於節點宕機而導致計算失敗,可以通過RDD的血緣關係圖來重新計算丟失和損壞的分割槽。

  • 分散式(Distributed)

資料分佈在叢集的多個節點上。

  • 不可變(Immutable)

RDD的資料一旦建立就不能修改,只能通過transformations函式建立新的RDD。

RDD的其他特性

RDD除了介紹的基本特性,RDD還具有以下特性:

  • 資料集(Dataset)

多個RDD可以構成一個數據集。資料集是多個分割槽的集合,這些資料可能是主型別的值,或者是值的值。比如字串的RDD,或者是陣列的RDD。

  • 基於記憶體的(In-Memory)

RDD的資料儘可能多、儘可能長時間的儲存在記憶體中。

  • 懶評估(Lazy evaluated)

transformations函式不會執行,直到執行action函式。(RDD的這兩種函式後面會有文章專門講解)

  • 可以持久化:

RDD的資料可以儲存在快取中,也可以持久化到硬碟。

  • 並行(Parallel)

RDD的資料處理是並行的。

  • 分割槽的(Partitioned)

RDD的資料是分割槽的,資料被分佈在叢集的多個節點上。

  • RDD是型別(Typed)

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

  • 本地粘性

RDD可以定義首選的位置,讓計算過程儘可能接近資料分割槽。

  • 其他說明

在RDD中,分割槽的計算被設計成一個分散式的過程,是為了實現資料的均勻分佈以及利用資料本地化(如HDFS分散式系統的資料分割槽)。

分割槽是並行處理的單元,你可以通過重新分割槽(repartition)或合併轉換(coalesce)來控制分割槽的數量。 spark試圖儘可能靠近需要訪問的資料,而不浪費時間通過RDD shuffling傳送資料在網路上,建立的分割槽儘可能和儲存系統的保持一致,從而優化資料訪問。

RDD的操作型別

RDDS支援兩種操作:

  1. transformations(轉換)

RDD的轉換操作由RDD的轉換函式來實現,它們是懶操作函式(lazy operations functions),用來返回另一個RDD。 之所以是lazy的,是由於,當呼叫它們時不會立即執行,只有等到actions函式執行時,才被執行。

  1. actions(動作/操作)

當呼叫RDD的action函式時,將會觸發計算,並返回計算結果。

總結

本文介紹了spark RDD的基本概念和RDD的特性。通過本文介紹應該對Spark的核心:RDD有一個比較全面的瞭解。