Spark - RDD 彈性分佈式數據集

RDD(Resilient Distributed Datasets) [1] ,彈性分佈式數據集, 是分佈式內存的一個抽象概念,RDD提供了一種高度受限的共享內存模型,即RDD是隻讀的記錄分區的集合,只能通過在其他RDD執行確定的轉換操作(如map、join和group by)而創建,然而這些限制使得實現容錯的開銷很低。對開發者而言,RDD可以看作是Spark的一個對象,它本身運行於內存中,如讀文件是一個RDD,對文件計算是一個RDD,結果集也是一個RDD ,不同的分片、 數據之間的依賴 、key-value類型的map數據都可以看做RDD。

RDD定義

RDD,Resilient Distributed DataSet:是一個容錯的,並行的數據結構,可以顯示制定數據存儲的位置(磁盤、內存【堆內內存,堆外內存】),能夠控制分區,提供豐富的數據處理操作。

彈性的體現方式:


  1. 自動的進行內存和磁盤數據存儲的切換
  2. 基於Lineage的高效容錯(第n個節點出錯,會從第n-1個節點回復,血統容錯)
  3. Task如果失敗會自動進行特定次數的重試
  4. 將每一個計算階段記爲一個Stage,Stage如果失敗會自動進行特定次數的重試(可以只運行計算失敗的階段);只計算失敗的數據分片
  5. checkpoint 和 persist,斷點與持久化
  6. 數據調度彈性:DAG TASK 和資源管理無關
  7. 數據分片的高度彈性(人工自由設置分片函數),repartition

RDD五大特性


  1. 數據存儲結構不可變
  2. 支持跨集羣的分佈式數據操作
  3. 可對數據記錄按Key進行分區
  4. 提供了粗粒度的轉換操作
  5. 數據存儲在內存中,保證了低延遲性

RDD內部五大接口:


  • partition:

  • preferredLocation§:

  • dependencies():

  • compute§:

  • paritioner():

創建RDD的常見方式


  1. 通過Scala集合創建

    val rdd1 = sc.makeRDD(1 to 1000);
    val rdd2 = sc.parallelize(1 to 100,3);
    
  2. 通過本地文件創建

    VAL DATA = SC.TEXTfILE("file:///home/hadoop/datas/data"):注意:各個節點相同目錄都需要存一份相同的文件,不然創建任務的時候會失敗。
    
  3. 通過HDFS文件創建

    val hdfsdata = sc.textFile("hdfs://master:8082/datas/data") // 從hdfs加載文件創建RDD。注意:必須寫明從哪個文件系統加載問價,寫清楚url
    
  4. 通過其他RDD轉換得到

    val hdfsrdd = sc.textFile("hdfs://master:8082/datas/data")
    hdfsrdd.map(row=>{row.split("").mkString("--")}).collect()
    
  5. 通過其他方式創建(如數據流,讀取NoSQL如HBase中的數據等,讀取關係型數據庫等)

RDD算子操作


map

flatmap

fliter

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