Spark深入淺出之從源碼看Spark佈局

RDD基於工作集的應用抽象(動態感知,容錯,負載均衡,彈性)

 1、RDD(Resilient distributed Dataset)彈性體現

  1. 自動的進行內存和磁盤數據存儲的切換
  2. 基於lineage的高效容錯(第n個節點出錯,會從n-1個節點恢復,血統容錯)
  3. Task如果失敗會自動進行特定次數的重試(默認4次)
  4. Stage如果失敗會自動進行特定次數的重試(可以只運行計算失敗的階段),只計算失敗的數據分片
  5. Checkpoint和persist
  6. DAG,Task和資源管理無關
  7. 數據分片的高度彈性(eg:如果有100萬數據碎片要合成1萬個。要用coalesce(numpartitions: Int,shuffle: Boolean = false) .不能用repartition。Because : repartition調用了coalesce 但是shuffle默認爲true.這樣的話就會造成shuffle開銷很大,且行且珍惜~)

 2、常用容錯方式 

  • 數據檢查點以及記錄數據的更新

 3、RDD通過記錄數據更新的方式爲何很高效   

  1. RDD是不可變的且加lazy.構成鏈條。從後往前函數展開(函數開始會new mappartitionsRDD。第一個構造參數傳的是父RDD)。如果第101個分片失敗了。會從第100個分片重新開始計算
  2. RDD的寫操作是粗粒度的但是RDD的讀操作既可以是粗粒度的也可以是細粒度的。爲了效率。

 4、RDD缺陷

  • 不支持細粒度的更新操作以及增量迭代計算。例如網絡爬蟲。

 5、RDD創建的幾個方式

   第一個RDD:代表了spark應用程序輸入數據的來源。通過Transformation來對RDD進行各種算子的轉換實現算法

  1. 使用程序中的集合創建RDD

意義:測試

  1. 使用本地文件系統創建RDD

意義:測試大量數據的文件

  1. 使用HDFS創建RDD

意義:生產環境最常用的RDD

  1. 基於DB創建RDD
  2. 基於NOSQL創建RDD 例如 HBase
  3. 基於啥s3創建RDD
  4. 基於數據流創建RDD

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