第14課:Spark RDD 解密

第14課:Spark RDD解密

1 RDD:基於工作集的應用抽象

2 RDD內幕解密

3 RDD 思考

MapReduce是基於數據集的

位置感知,容錯 負載均衡

基於數據集的處理:從物理存儲上加載數據,然後操作數據 然後寫入物理存儲設備,具體例子:Hadoop MapReduce

 

基於數據集的操作不適應的場景:

1,不適合於大量的迭代

2,交互式查詢

重點是:基於數據流的方式 不能夠複用曾經的結果或者中間計算結果

RDD是基於工作集的

RDD:ResillientDistributed Dataset

 

 

1、彈性之一:自動的進行內存和磁盤數據存儲的切換;
2、彈性之二:基於Lineage的高效容錯(第n個節點出錯,會從第n-1個節點恢復,血統容錯);
3、彈性之三:Task如果失敗會自動進行特定次數的重試(默認4次);
4、彈性之四:Stage如果失敗會自動進行特定次數的重試(可以值運行計算失敗的階段);只計算失敗的數據分片

5,checkpoint和persist

6,數據調度彈性:DAG TASK和資源 管理無關

7,數據分片的高度彈性

def repartition(numPartitions: Int)(implicit ord:Ordering[T] = null): RDD[T] = withScope {
coalesce(numPartitions, shuffle = true)
}

 

def coalesce(numPartitions: Int, shuffle: Boolean =false)(implicit ord: Ordering[T] = null)

 

一個Stage,有1000個RDD,默認情況下只產生一個結果

RDD:是分佈式函數式編程的抽象

基於函數式編程一般都會使用高階函數

 

RDD 核心之一lazy級別

Flatmap:

new MapPartitionsRDD[U, T](this, (context, pid, iter)=> iter.flatMap(cleanF))

 

最低使用1.3版本,建議使用1.6版本

常規的容錯方式,有哪些:

1:數據檢查點,2:記錄數據的更新

數據中心的網絡,檢查所有節點,需要有一個拷貝,是通過網絡,網絡帶寬是分佈式瓶頸,對存儲資源很大消耗

問題之一是複雜度

問題之二是耗性能

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

1,RDD是不可變的+Lazy

2,RDD是粗粒度

RDD的寫操作是粗粒度的!

但是 RDD讀操作既可以是粗粒度的也可以是細粒度的!

RDD的寫操作是粗粒度除了效率以外,是否還有簡化複雜度

 

數據本地性的問題getPreferredLocations

南北數據中心不同步數據的 Tachyon去處理

Rdd所有的操作都返回iterator

 

this.type 從java的角度,是不能調用子類的方法

spark是可以調用

 

Spark要統一數據計算領域 除了實時事務性處理

 

 

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