RDD基於工作集的應用抽象(動態感知,容錯,負載均衡,彈性)
1、RDD(Resilient distributed Dataset)彈性體現
- 自動的進行內存和磁盤數據存儲的切換
- 基於lineage的高效容錯(第n個節點出錯,會從n-1個節點恢復,血統容錯)
- Task如果失敗會自動進行特定次數的重試(默認4次)
- Stage如果失敗會自動進行特定次數的重試(可以只運行計算失敗的階段),只計算失敗的數據分片
- Checkpoint和persist
- DAG,Task和資源管理無關
- 數據分片的高度彈性(eg:如果有100萬數據碎片要合成1萬個。要用coalesce(numpartitions: Int,shuffle: Boolean = false) .不能用repartition。Because : repartition調用了coalesce 但是shuffle默認爲true.這樣的話就會造成shuffle開銷很大,且行且珍惜~)
2、常用容錯方式
- 數據檢查點以及記錄數據的更新
3、RDD通過記錄數據更新的方式爲何很高效
- RDD是不可變的且加lazy.構成鏈條。從後往前函數展開(函數開始會new mappartitionsRDD。第一個構造參數傳的是父RDD)。如果第101個分片失敗了。會從第100個分片重新開始計算
- RDD的寫操作是粗粒度的但是RDD的讀操作既可以是粗粒度的也可以是細粒度的。爲了效率。
4、RDD缺陷
- 不支持細粒度的更新操作以及增量迭代計算。例如網絡爬蟲。
5、RDD創建的幾個方式
第一個RDD:代表了spark應用程序輸入數據的來源。通過Transformation來對RDD進行各種算子的轉換實現算法
- 使用程序中的集合創建RDD
意義:測試
- 使用本地文件系統創建RDD
意義:測試大量數據的文件
- 使用HDFS創建RDD
意義:生產環境最常用的RDD
- 基於DB創建RDD
- 基於NOSQL創建RDD 例如 HBase
- 基於啥s3創建RDD
- 基於數據流創建RDD