1. 程式人生 > >[Spark]-RDD

[Spark]-RDD

poi persist TE rep art line IT 16px 集中

1.什麽是RDD
  Resilient Distributed Dataset(RDD),彈性的分布式數據集.
  分布式數據集,是指數據集會以patition塊的方式,存儲在多個節點上.
  彈性,體現在Spark計算過程中將數據的抽象封裝,依此帶來的各種重試機制,內存和磁盤切換,高自由的分片函數等
    Hadoop的MapReduce,是基於數據集(物理)的處理,從物理存儲上加載數據,操作數據,然後寫入物理存儲設備.不適用於大量叠代(重用中間成果的IO成本太高)
    Spark的RDD,是基於工作集(將數據集抽象封裝)的處理.工作集保留數據集的位置感知,自動容錯,負載均衡等優點,還具有抽象封裝所帶來的彈性,具體體現在:
      自動進行內存和磁盤存儲的切換
      節點的彈性:節點基於Lineage的容錯(第N個節點出錯,會嘗試從N-1個節點重新恢復數據)
      Task的彈性:Task失敗會自動重試(默認4次)
      Stage的彈性:Stage失敗也會進行重試,並且可以重計算失敗的數據分片或者只重計算失敗的步驟
      CheckPoint和Persist
      數據調度的彈性:DAG TASK和資源管理無關
      數據分片的高度彈性:人工自由設置分片函數和支持Repartition
2.RDD的五大特性


  RDD是由多個Partition組成的一個List
  對RDD的每一個操作,都會對RDD裏的每一個Partition執行同一個操作
  每一個RDD都會記錄它的依賴(方便重新計算,緩存化或者CheckPoint)
  如果RDD裏存放的是Key-Value的形式.則可以傳入一個自定義的分區函數進行分區(比如自定義按Key分區,則會將不同RDD的相同Key都集中在一個Partition中)
  計算就近原則.計算會盡可能的放入split所在的節點中(應該是節點集,因為有數據副本)
3.RDD的創建
  RDD的創建兩種方式
  3.1 從一個本地的Scala集合創建

    as
  3.2 從一個外部的存儲系統中創建

    比如HDFS,HBase等支持任何Hadoop InputFormat的存儲系統

    as

[Spark]-RDD