53 Spark效能優化之使用序列化的持久化級別

2021-09-10 02:33:16 字數 504 閱讀 5346

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

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

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

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

Spark效能優化之Shuffle效能調優

一 shuffle效能調優 1,問題 shuffle output file lost?真正的原因是gc導致的!如果gc尤其是full gc產生通常會導致執行緒停止工作,這個時候下乙個stage的task在預設情況下就會嘗試重試來獲取資料,一般重試3次每次重試的時間為5s,也就是說預設情況下15s內...

59 Spark效能優化之shuffle效能優化

沒有開啟consolidation機制的效能低下的原理剖析.png 總結,沒有開啟consolidation機制的時候,shufflewtiter的效能,是比較低的,而且會影響到shuffle read的效能,而且效能也會比較低 因為shuffle map端建立的磁碟檔案太多了,導致shuffle ...

56 Spark效能優化之廣播共享資料

廣播共享資料原理.png 如果你的運算元函式中,使用到了特別大的資料,那麼,這個時候,推薦將該資料進行廣播。這樣的話,就不至於將乙個大資料拷貝到每乙個task上去。而是給每個節點拷貝乙份,然後節點上的task共享該資料。這樣的話,就可以減少大資料在節點上的記憶體消耗。並且可以減少資料到節點的網路傳輸...