【Spark你媽喊你回家喫飯-03】Spark RDD的蠻荒世界

       RDD真的是一個很晦澀的詞彙,他就是伯克利大學的博士們在論文中提出的一個概念,很抽象,很難懂;但是這是spark的核心概念,因此有必要spark rdd的知識點,用最簡單、淺顯易懂的詞彙描述。不想用學術話的語言來闡述RDD是什麼,用簡單、容易理解的方式來描述。

           

  一、什麼是RDDRDD出現的背景

     Mapreduce計算模型的出現解決了分佈式計算的諸多難題,但是由於MR對數據共享的解決方案比較低效,導致MR編程模型效率不高,將數據寫到一個穩定的外部存儲系統,如HDFS,這個會引起數據複寫、磁盤IO、磁盤序列化和反序列化等操作。RDD可以指定策略,能不寫入的到磁盤的就不寫入。總結起來,MR經常和磁盤交互,中間結果不復用,導致中途做很多無用功。

  二、RDD概念

      RDD,residenta distributed dataset,彈性分佈式數據集

  1)數據集

 如果你熟悉數據庫,那麼RDD從表現形式上講最類似於數據庫的視圖(View)去除這個RDD在物理結構上的特色,單從邏輯上的表現來說,他就是一個數據集合。什麼是數據集合?可以理解爲Java中的一個list,或者是數據庫裏的一張表(或者視圖)等等。既然是一張表,我們可以理解SparkRDD的操作,其實類似於SQL裏面對錶的一些操作。每個RDD5個主要的屬性:

·一組分片(partition),即數據集的基本組成單位

·一個計算每個分片的函數

·對parent RDD的依賴,這個依賴描述了RDD之間的lineage

·對於key-valueRDD,一個Partitioner

·一個列表,存儲存取每個partitionpreferred位置。對於一個HDFS文件來說,存儲每個partition所在的塊的位置。

 

  2)彈性

  最開始的時候我說RDD最類似數據庫的視圖,那爲什麼是視圖而不是表呢?這就要說說RDD裏面的這個R(彈性),什麼叫彈性呢,就是一個RDD的數據並不一定是物理上真是存在的,注意是不一定,就像數據庫裏的視圖(view),只有你在query的時候他纔會真正計算出這些數據。RDD裏的數據也一樣,比如一張全是大寫地名的表-- {S: SHANGHAI, BEIJING, ...},可能在RDD裏是這樣一種形式 {S = S1:{Shanghai, BEIJing, ...}. toUPPERcase }. 前面提到的兩個數集合在物理上的內容其實是不一樣的,但是你能看到的兩個集合是一樣的。在Spark裏面,類似於toUPPERcase 這樣的操作我們叫算子。好了,這樣你就理解了這個R,也是RDD最難懂的一個地方。

  3)分佈式

   再說說中間的那個D(分佈式),這個很好理解,就是一個數據集分別放在幾個機器上,而RDD只要存儲這些數據的元信息(如那一片在哪個機器上)即可。這樣也就不難理解之前“仲晟”的回答:“RDD,包含一組分區列表(實際上是分區到block的映射,具體數據可以是分佈式的存儲在HDFS各個節點上)以及一組transformationaction算子等。”

  4)容錯
 不過這樣解釋似乎缺了些什麼,就是爲什麼RDD要如此麻煩呢?這裏我說最明顯的兩個亮點。1,容錯:比如你有一個表,裏面是一個公司12個月的平均銷售額,存儲在12個機器上,突然存儲8月數據的機器壞了,那麼你通常選擇的做法是把整一年的銷售資料拿出來,再以月份分組,再把8月的算出來,存在一個好的機器裏。而RDD存儲8月的數據可能就是(select avgsalesfrom t where month = 8) ,在你需要的時侯,如果發現8月數據不在了,可以自動從原數據裏把這個數據恢復出來。(這個例子並不是特別真實,只不過很簡單的幫你理解容錯這個特性)。

  5)執行效率優化

  一個優點是執行效率優化。假設有這麼一個情況,有一個數據表,先把裏面的數據都+1,再-1,再+1,再-1. 這樣顯然數據應該都是不變的。如果你每次都把這個數據表都算出來,這樣就要執行4O(n)效率的查找。然而用RDD的思路,{S'} = {S}+1-1+1-1 => {S'} = {s} + 0, 這樣就大大提高了效率。(同樣這個例子很弱智,但是能幫助你理解RDD爲什麼要用數據+算子的形式去描述一個數據集).

  在所有解釋中我忽略了Spark平臺,HDFS等因爲穿在一起真的很難講的通俗易懂。只是儘可能的用大白話來講。若要深入瞭解還需要結合Spark的運行機制,HadoopHDFSScala的語法共同來理解RDD這樣東西。



【Spark你媽喊你回家喫飯】系列爲本博原創文章,同時發佈在微信公衆號:大數據梅峯谷,轉載請註明,想了解更多精彩大數據技術文章,請關注微信公衆號:大數據梅峯谷 ,也可以掃描二維碼




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章