spark 的kyro序列化问题与感想

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

前言

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

spark的序列化机制

spark提供2个序列化库

  • 1、Java serialization

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

  • 2、Kryo serialization

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序列化就足够。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值