【大数据学习 | Spark调优篇】数据序列化(kryo序列化)

在任何分布式系统中,序列化都是扮演着一个重要的角色的。如果使用的序列化技术,在执行序列化操作的时候很慢,或者是序列化后的数据还是很大,那么会让分布式应用程序的性能下降很多。所以,进行Spark性能优化的第一步,就是进行序列化的性能优化。

Spark 旨在便利性(允许您在操作中使用任何 Java 类型)和性能之间取得平衡。它提供了两个序列化库:

1. Java 序列化机制:

默认情况下,spark使用此种机制。

默认情况下,Spark使用Java自身的ObjectInputStream和ObjectOutputStream机制进行对象的序列化。而且Java序列化机制是提供了自定义序列化支持的,只要你实现Serializable接口即可实现自己的更高性能的序列化算法。Java序列化机制的速度比较慢,而且序列化后的数据占用的内存空间比较大。

2. Kryo 序列化机制:

Spark也支持使用Kryo类库来进行序列化。Kryo序列化机制比Java序列化机制更快,而且序列化后的数据占用的空间更小,通常比Java序列化的数据占用的空间要小10倍。Kryo序列化机制之所以不是默认序列化机制的原因是,有些类型它也不一定能够进行序列化 ;此外,如果你要得到最佳的性能,Kryo还要求你在Spark应用程序中,对所有你需要序列化的类型都进行注册

如何使用Kryo 序列化机制

3. kryo序列化关于主动注册和自动注册的问题:

3.1 自动注册:

如果你不显示注册类,kryo会尝试自动检测并注册需要序列化的类。这种自动注册机制可能会导致一些问题,比如加载一些不必要的类或增加启动时间。

自动注册的缺点是kryo可能会扫描所有的类路径,这可能导致性能下降,尤其是在类路径中有大量类的情况。

3.2 手动注册:

为了避免手动注册带来的问题,你可以手动注册需要序列化的类。手动注册可以确保只有必要的类会被加载,从而提高性能和减少内存使用。

手动注册类的方式是在SparkConf中设置spark.kryo.registionRequired为true,并提供一共注册类的列表。

4. 优化Kryo 类库的使用

1)优化缓存大小

如果注册的要序列化的自定义的类型,本身特别大,比如包含了超过100个field。那么就会导致要序列化的对象过大。此时就需要对Kryo本身进行优化。因为Kryo内部的缓存可能不够存放那么大的class对象。此时就需要调用SparkConf.set()方法,设置spark.kryoserializer.buffer.max参数的值,将其调大。

默认情况下它的值是64,就是说最大能缓存64M的对象,然后进行序列化。可以在必要时将其调大。

2)预先注册自定义类型

使用自定义类型时需要预先注册好要序列化的自定义的类。

在什么场景下使用Kryo 序列化类库?

1)从 Spark 2.0.0 开始,在内部使用 Kryo 序列化程序来对具有简单类型、简单类型数组或字符串类型的 RDD 进行shuffle。

2)在你的算子中使用了别人实现写的且没有实现Serializable,比如hadoop的Text。

3)算子函数使用到了外部的大对象情况。比如我们在外部自定义了一个Map对象,里面包含了100m的数据。然后,在算子函数里面,使用到了这个外部的大对象。此时用广播变量替代大对象。

相关推荐
ha_lydms7 小时前
5、Spark函数_s/t
java·大数据·python·spark·数据处理·maxcompute·spark 函数
电商API&Tina7 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
robinson19888 小时前
验证崖山数据库标量子查询是否带有CACHE功能
数据库·oracle·cache·自定义函数·崖山·标量子查询
StarChainTech9 小时前
电动车租赁中的智能管理:电子围栏技术如何改变出行行业
大数据·人工智能·微信小程序·小程序·团队开发·软件需求·共享经济
陈平安安9 小时前
设计一个秒杀功能
java·数据库·sql
能源系统预测和优化研究9 小时前
【原创代码改进】考虑共享储能接入的工业园区多类型负荷需求响应经济运行研究
大数据·算法
面向Google编程9 小时前
Flink源码阅读:双流操作
大数据·flink
廋到被风吹走10 小时前
【数据库】【Oracle】SQL基础
数据库·sql·oracle
曹牧10 小时前
Oracle统计每日发生次数
数据库·oracle
sysinside10 小时前
Elasticsearch 9.2 发布 - 分布式搜索和分析引擎
大数据·分布式·elasticsearch