spark 的kyro序列化问题与感想

2020-07-07  本文已影响0人  早点起床晒太阳

参考资料:https://spark.apache.org/docs/2.4.1/tuning.html (官网地址)

前言

一直都在说kyro序列化,这一块对于spark在序列化这块性能提升比较大,今天研究下

spark的序列化机制

spark提供2个序列化库

java 序列化库很灵活但是很慢,序列化对象占用的空间大。

kyro序列化更块更紧凑,但是不支持所有的Serializable 类型,需要去预先注册

更改序列化库

可以使用这个配置来修改序列化库

spark.serializer

默认为 org.apache.spark.serializer.JavaSerializer
如果打算替换Kryo为 org.apache.spark.serializer.KryoSerializer

替换为Kryo序列化库存在的问题

kyro预先注册需要手动注册,通过类似于这种方式

conf.registerKryoClasses(Array(classOf[Info], classOf[scala.collection.mutable.WrappedArray.ofRef[_]]))

kyro有相应的配置

spark.kryo.registrationRequired

默认为false。如果修改为true的话,如果有类没有注册kyro类的话,会抛出异常。如果为false则会写入未注册的类名和对象一起,显著增大性能开销。

个人感觉:如果项目稳定的话,代码修改量小的时候,可以使用kryo这种方式,可以加上spark.kryo.registrationRequired 配置,来检测哪个类没有被注册。在频繁变动的场景的话,并且对性能要求不高,java序列化就足够。

上一篇 下一篇

猜你喜欢

热点阅读