Spark核心理念-彈性分布式數據集 簡介

Resilient Distribute DataSet

RDD是Spark最核心的理念, 要掌握Spark, 首先要把RDD這個概念搞明白. 下面我將嘗試去解釋一下RDD的概念.

如果你使用過Scala的集合類庫, 那么你會發現RDD和它的API非常一致. 在Scala中我們經常使用map, foreach, flatMap等這些函數, 而你和RDD打交道, 無非就是這幾個函數. 招式是一樣的. 從這個層面看, 你可以把RDD看成是Scala中的一個非變集合(immutable collection).

RDD不同于Scala集合的地方正在于它名字的前兩個字母distribute和resilient. 說句玩笑話, 雖然Scala集合和RDD招式上一致(都源于Monad), 但是RDD的內功比Scala集合深厚了不知多少倍. 好了, 我們接著來看剛才提到的RDD最重要的兩個特性. Distribute, 這個特性說明RDD可以分布到多臺機器上執行; Resilient有可復原, 可恢復的意思, 這表示RDD是可以重新構建的, 具備容錯性的.

總結一下, RDD就是一種具有容錯性和可并行執行的數據結構. 接下來看一下RDD是如何做到這兩點的.

Distribute

首先, 我們來寫一個簡單的統計單詞數量的示例:

val textFile = sc.textFile(inputFile, 3) //讀取文件, 指定分區數量
textFile
  .map(_.split(" ")) //把每行按找空格分割, 得到單詞的數組
  .map(_.length) //求出每行的單詞個數

val wordCount = .reduce(_ + _) //匯總

textFile函數是可以攜帶兩個參數的, 第一個是我們要輸入的文件, 第二個是partitions的個數. partition這個參數就是和distribute緊密關聯的. RDD在執行的時候是以分區為基本單位的, 每個分區持有一定數量的數據, 各個分區在執行的時候是相互獨立, 并行執行的. RDD可分區特性為它并行執行提供了前提.

Resilient

說Resilient之前先稍微鋪墊一下. RDD提供了兩種API: transformation(轉換) & action(執行). 像map, flatMap, filter等這些API都是轉換操作. 還有RDD是延遲執行(lazy evaluate)的, 轉換操作并不會觸發真正的計算, 它只是向RDD提交執行計劃. RDD真正的執行是由action函數觸發的, action函數有reduce, take, count等. 轉換和執行函數還有很多API詳細參照文檔.

還有一點, 每個RDD都是只讀的. 這是什么意思呢? 就是說, RDD是不可變的, 一經創建不論什么時候讀, 在什么地方讀, 結果都是一樣的. 那問題來了, 既然RDD是只讀的, 那它做的那些map, filter到底在干什么呢? 上文也提到了一點RDD上的transformation是在構建執行計劃; 另外一點是, 建立RDD之間的依賴關系. (這兩點是緊密聯系的, 這個會在后續分析Spark內部執行流程的文章會提到, 現在大概知道這么回事即可.) 我們可以使用RDD提供的toDebugString查看RDD之間的依賴關系. 下邊給出了WordCount示例所產生的RDD依賴關系:

(1) MapPartitionsRDD[5] at map at WordCount.scala:22 []
 |  MapPartitionsRDD[4] at map at WordCount.scala:21 []
 |  MapPartitionsRDD[1] at textFile at WordCount.scala:16 []
 |  /home/focusj/workspace/scala/SparkTour/src/main/scala/lfda/core/WordCount.scala HadoopRDD[0] at textFile at WordCount.scala:16 []

那RDD是如何做到容錯的呢? 假設一個任務在執行的過程中, 集群中一個節點宕機, 在該機器上運行的任務和數據全部丟失. 這時Spark會立即通知其它節點重新執行該任務. 因為RDD內部記錄了足夠的信息去恢復這個任務. 這些信息包括RDD之間的依賴關系和執行計劃. 所以, RDD是容錯的.

到此, 把RDD的基本概念說完了, 下篇會著重解釋Spark內部是如何工作的. 從一個RDD Action API的調用開始, 到最終結果輸出, Spark都會作哪些工作.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容