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

猜你喜欢

转载自blog.csdn.net/qq_43688472/article/details/85266885