Spark 序列化
官方文档:https://spark.apache.org/docs/latest/tuning.html
序列化在分布式应用的性能中扮演着重要的角色。格式化对象缓慢,或者消耗大量的字节格式化,会大大降低计算性能。通常这是在spark应用中第一件需要优化的事情。Spark的目标是在便利与性能中取得平衡,所以提供2种序列化的选择。
Java serialization
在默认情况下,Spark会使用Java的ObjectOutputStream框架对对象进行序列化,并且可以与任何实现java.io.Serializable的类一起工作。您还可以通过扩展java.io.Externalizable来更紧密地控制序列化的性能。Java序列化是灵活的,但通常相当慢,并且会导致许多类的大型序列化格式。
Kryo serialization
Spark还可以使用Kryo库(版本4)来更快地序列化对象。Kryo比Java串行化(通常多达10倍)要快得多,也更紧凑,但是不支持所有可串行化类型,并且要求您提前注册您将在程序中使用的类,以获得最佳性能。
您可以通过使用SparkConf初始化作业并调用conf.set(“ spark.serializer”,“ org.apache.spark.serializer.KryoSerializer”)来切换为使用Kryo。
要向Kryo注册您自己的自定义类,请使用registerKryoClasses方法
1 | val conf = new SparkConf().setMaster(...).setAppName(...) |