spark效能調優 RDD持久化

2021-08-21 12:23:31 字數 731 閱讀 1547

第一,rdd重構與優化

盡量去復用rdd,差不多的rdd,可以抽取成為乙個共同的rdd,供後面的rdd計算時,反覆使用。

第二,公共rdd一定要實現持久化

持久化,也就是說,將rdd中的資料快取到記憶體中,或者快取到磁碟中,(blockmanager),以後無論對這個rdd做多少次計算,那麼都是直接取rdd的持久化的資料,比如從記憶體中或者磁碟中,直接提取乙份資料

第三:持久化,是可以進行序列化的

如果正常將資料持久化到記憶體中,那麼可能會導致記憶體的占用過大,這樣的話,也許,會導致oom記憶體溢位,當純記憶體無法支撐公共的rdd資料完全存放的時候,就優先考慮,使用序列化的方式在純記憶體中儲存,將rdd的每個partition資料,序列化成乙個大的位元組陣列,就乙個物件,序列化後,大大減少記憶體的空間占用。

序列化的方式,唯一的缺點就是在獲取資料的時候需要反序列化

如果序列化純記憶體方式,還是導致oom,記憶體溢位,就只能考慮磁碟的方式,記憶體+磁碟的普通方式(別序列化)

最不好的是記憶體+磁碟+序列化

第四,為了資料的高可靠性,而且記憶體充足,可以使用雙副本機制,進行持久化。

持久化的雙副本機制(記憶體超多的情況)

持久化怎麼做?

就是對rdd呼叫persist()方法,並傳入乙個持久化級別

action.persist(storagelevel.memory_only());

只要乙個spark作業中的rdd被使用了倆次以上,那麼就可以對它進行persist

Spark效能優化 RDD持久化

如果程式中,對某乙個rdd,基於它進行了多次transformation或者action操作。那麼就非常有必要對其進行持久化操作,以避免對乙個rdd反覆進行計算。此外,如果要保證在rdd的持久化資料可能丟失的情況下,還要保證高效能,那麼可以對rdd進行checkpoint操作。除了對多次使用的rdd...

二 Spark效能調優 RDD優化

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

技術難點 Spark效能調優 RDD運算元調優篇

不廢話,直接進入正題!1.rdd復用 在對rdd進行運算元時,要避免相同的運算元和計算邏輯之下對rdd進行重複的計算,如下圖所示 對上圖中的rdd計算架構進行修改,得到如下圖所示的優化結果 2.盡早filter 獲取到初始rdd後,應該考慮盡早地過濾掉不需要的資料,進而減少對記憶體的占用,從而提公升...