spark優化----序列化持久化
阿新 • • 發佈:2018-12-25
簡介: 除了對多次使用的RDD進行持久化操作之外,還可以進一步優化其效能,因為很有可能,RDD的資料是持久化到記憶體,或者磁碟中的,那麼此時如果記憶體大小不是特別充足,完全可以使用序列化的持久化級別, 如下: 1.MEMORY_ONLY_SER 2.MEMORY_AND_DISK_SER 使用RDD.persist(StorageLevel.MEMORY_ONLY_SER)這樣的語法即可。 好處: 1.將資料序列化之後,再持久化可以大大減小對記憶體的消耗。 2.資料量小了之後,如果要寫入磁碟,那麼磁碟io效能消耗也比較小。 缺點: 對RDD持久化序列化後,RDD的每個partition的資料,都是序列化為一個巨大的位元組陣列,這樣對於記憶體的消耗就小的多了。但是唯一的缺點就是,獲取RDD資料時,需要對其進行反序列化,會增大其效能(cpu)開銷。 因此對於序列化的持久化級別,還可以進一步優化,也就是說使用Kryo序列化類庫,這樣可以獲得更快的序列化速度,並且佔用更小的記憶體空間。 注意: 如果RDD的元素(RDD<T>的泛型型別),是自定義型別的話,在Kryo中提前註冊自定義型別。