Spark效能優化 RDD方法優化

2021-09-25 19:58:10 字數 841 閱讀 4873

對於rdd中某些函式使用注意

1.能不使用groupbykey函式就不使用,除非不得已

redcuebykey(combiner) =  groupby+ map(變數值相加)

redcuebykey可以先進行本地聚合操作

2.盡量使用xxpartition函式代替xx函式

xx:map/foreach/zip

def foreach(f: t => unit): unit

f:針對rdd中每個元素進行的操作處理的

def foreachpartition(f: iterator[t] => unit): unit

f:針對rdd中每個分割槽的元素進行操作處理的

比如rdd中2個分割槽,100條資料,現將資料報道mysql表中

foreach

item ->mysql

connection ->建立100次

foreachpartition

對每個分割槽中資料

只要獲取2個連線即可

3.適當的降低或者增加rdd分割槽數目

rdd的分割槽對應乙個task處理資料

def repartition(numpartitions: int)  -產生shuffle

def coalesce(numpartitions: int, shuffle: boolean = false)

一開始的時候,資料量比較多,可以加到rdd分分割槽數,增加並行度(在集群資源充足的情況下)

當資料預處理之後(尤其過濾清洗之後)。rdd中資料量減少了很多,此時可以考慮減少分割槽的數目

二 Spark效能調優 RDD優化

在對 rdd 進行運算元時,要避免相同的運算元和計算邏輯之下對 rdd 進行重複的計算,優化前如圖 優化後如圖 在 spark 中,當多次對同乙個 rdd 執行運算元操作時,每一次都會對這個 rdd以之前的父 rdd 重新計算一次,這種情況是必須要避免的,對同乙個 rdd 的重複計算是對資源的極大浪...

spark效能調優之重構RDD架構,RDD持久化

當第一次對rdd2執行運算元,獲取rdd3的時候,就會從rdd1開始計算,就是讀取hdfs檔案,然後對rdd1執行運算元,獲取到rdd2,然後再計算,得到rdd3 預設情況下,多次對乙個rdd執行運算元,去獲取不同的rdd 都會對這個rdd以及之前的父rdd,全部重新計算一次 讀取hdfs rdd1...

spark效能調優 RDD持久化

第一,rdd重構與優化 盡量去復用rdd,差不多的rdd,可以抽取成為乙個共同的rdd,供後面的rdd計算時,反覆使用。第二,公共rdd一定要實現持久化 持久化,也就是說,將rdd中的資料快取到記憶體中,或者快取到磁碟中,blockmanager 以後無論對這個rdd做多少次計算,那麼都是直接取rd...