Spark-Serialization序列化的2種方式解釋對比使用場景
序列化在任何分散式應用程式的效能中都扮演著重要的角色。序列化物件很慢的格式,或者消耗大量位元組的格式,將大大降低計算速度。通常情況下,這是優化Spark應用程式時需要優化的第一件事。Spark旨在在方便(允許您在操作中使用任何Java型別)和效能之間取得平衡。它提供了兩個序列化庫:
~~
一:Java Serialization:
~~
1:預設 2:靈活(可以與任意類)3:慢效能不高體積更大
來自官網:By default, Spark serializes objects using Java’s ObjectOutputStream framework, and can work with any class you create that implements java.io.Serializable. You can also control the performance of your serialization more closely by extending
Java serialization is flexible but often quite slow, and leads to large serialized formats for many classes.
預設情況下,Spark使用Java的ObjectOutputStream框架序列化物件,並且可以與您建立的任何實現Java .io. serializable的類一起工作。還可以通過擴充套件更緊密地控制序列化的效能
Java序列化是靈活的,但通常很慢,並導致許多類的大型序列化格式。
二:Kryo Serialization:
1:更快 2:體積小3:並不支援所有類4事先要註冊(否非更大沒有起到很好效果)
來自官網:Spark can also use the Kryo library (version 4) to serialize objects more quickly. Kryo is significantly faster and more compact than Java serialization (often as much as 10x), but does not support all Serializable types and requires you to register the classes you’ll use in the program in advance for best performance.
Spark還可以使用Kryo庫(版本4)更快地序列化物件。Kryo比Java序列化快得多,也更緊湊(通常是10倍),但是不支援所有可序列化型別,並且要求您預先註冊將在程式中使用的類,以獲得最佳效能。
注意:上面說是10倍,其實並沒有,要以事實為依據
後期我會帶大家一起測試
三:序列化在spark中的使用場景
1:運算元裡面使用到了外部變數
2:cache快取
3:shuffle
官網:https://spark.apache.org/docs/latest/tuning.html