2014年11月20日 星期四

[Apache Spark][基本架構] RDD特性(一)

        
        
        萬丈高樓平地起,要熟悉Spark就得熟悉RDD,要熟悉RDD,就是要看Doc.延續著上一篇:[Spark][基本架構] 關於RDD中的不可變性(immutable),說到當我們對RDD做運算時,其實都會產生不同的RDD.RDD的官方文件(http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.RDD)一開始說到這些不同的RDD都共同擁有五個特性:

  • Partition的列表(sorry不知道partition要怎樣翻):RDD是分散式架構,會將一筆資料分成一到n個partition,所以每個RDD裡面都會紀錄這些partition.

  • 計算函數:當我們處理RDD時,RDD會將相同到函數map到每個partition上執行.

  • 與其他RDD的依賴關係:每個RDD都會連結到其他RDD,所以RDD裡面也會紀錄與其他RDD的關係,如果RDD發生損毀可以依照相同的依賴關係去要前一個(或數個)RDD傳資料給他.

  • (Optionally)放置Key-value的分頁:如果有用到hash-partition時,會多一個partition來放對應的key-value.

  • (Optionally)處理資料時偏好的位置:一般來說RDD在計算資料時會優先在原地處理後再將資料做交換(如果有需要的話,例如reduceByKey).這時候RDD會存放處理各分頁資料的位置.

以上是每個RDD物件都具有的特性,RDD透過這些特性可以來做複雜的計算和資料處理.而除了系統原本就有的RDD之外呢,使用者也可以自己繼承並實作RDD來創造自己的RDD.