Spark效能優化 RDD持久化

2021-08-07 19:48:56 字數 704 閱讀 8039

如果程式中,對某乙個rdd,基於它進行了多次transformation或者action操作。那麼就非常有必要對其進行持久化操作,以避免對乙個rdd反覆進行計算。

此外,如果要保證在rdd的持久化資料可能丟失的情況下,還要保證高效能,那麼可以對rdd進行checkpoint操作。

除了對多次使用的rdd進行持久化操作之外,還可以進一步優化其效能。因為很有可能,rdd的資料是持久化到記憶體,或者磁碟中的。那麼,此時,如果記憶體大小不是特別充足,完全可以使用序列化的持久化級別,比如memory_only_ser、memory_and_disk_ser等。使用rdd.persist(storagelevel.memory_only_ser)這樣的語法即可。

這樣的話,將資料序列化之後,再持久化,可以大大減小對記憶體的消耗。此外,資料量小了之後,如果要寫入磁碟,那麼磁碟io效能消耗也比較小。

對rdd持久化序列化後,rdd的每個partition的資料,都是序列化為乙個巨大的位元組陣列。這樣,對於記憶體的消耗就小的多了。但是唯一的缺點就是,獲取rdd資料時,需要對其進行反序列化,會增大其效能開銷。

因此,對於序列化的持久化級別,還可以進一步優化,也就是說,使用kryo序列化類庫(關於kryo序列化類庫請參考我的另外一篇文章《spark效能優化——高效能序列化類庫》),這樣,可以獲得更快的序列化速度,並且占用更小的記憶體空間。但是要記住,如果rdd的元素(rdd的泛型型別),是自定義型別的話,在kryo中提前註冊自定義型別。

spark效能調優 RDD持久化

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

spark筆記 RDD的持久化

rdd.cache rdd.persist storagelevel.memory only persist方式可選取以下不同方式持久化memory and disk 如果記憶體不夠再存磁碟 disk only memory only ser 存資料時候實現序列化 可節省記憶體,但是讀取時要反序列化...

Spark效能優化 RDD方法優化

對於rdd中某些函式使用注意 1.能不使用groupbykey函式就不使用,除非不得已 redcuebykey combiner groupby map 變數值相加 redcuebykey可以先進行本地聚合操作 2.盡量使用xxpartition函式代替xx函式 xx map foreach zip...