1. 程式人生 > >spark優化----序列化持久化

spark優化----序列化持久化

簡介:
    除了對多次使用的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中提前註冊自定義型別。