前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark性能调优篇四之使用Kryo进行序列化操作

Spark性能调优篇四之使用Kryo进行序列化操作

作者头像
z小赵
发布2018-09-05 15:43:38
1.6K0
发布2018-09-05 15:43:38
举报
文章被收录于专栏:简单聊聊Spark

接着上一篇文章,今天介绍一下通过使用Kryo这个东东来进一步降低网络IO的传输量和内存的占用率。在介绍Kryo之前,接下来我们先来对比一下默认的序列化和Kryo方式的序列化的性能(其实就是序列化后数据的体积)。

默认的序列化:基于Java语言的Spark程序中,默认使用了ObjectInputStream和ObjectOutputStream对对象进行序列化操作的。这种默认序列化机制的好处在于,处理起来比较方便;不需要我们手动去做什么事情,只是在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可。

Kryo方式的序列化:Spark支持了Kryo序列化类库,采用Kryo对数据进行序列化操作可以大大降低数据体积,官方给出的数据是采用Kryo进行序列化比采用Java默认的序列化方式,性能高出后者10倍(官方提供的数据,没有正式测试过)。

        通过以上的对比,相信大家都很期待使用Kryo对数据进行序列化操作。在使用Kryo之前,我们需要明白在那些地方可以充分发挥Kryo序列化的作用;否则,即使启动了该功能,但并不能提升Spark作业的运行速度。主要有三个地方;

1、算子函数中使用到的外部变量(例如上一篇提到的随机抽取数据的map) 2、持久化RDD时进行序列化,StorageLevel.MEMORY_ONLY_SER  3、shuffle阶段

        明确了以上的一些问题之后,我们看看在项目中是怎么的使用的吧。其实很简单,通过使用JavaSparkContext对象启用Kryo对数据进行序列化

sc.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") sc.registerKryoClasses(new Class[]{CategorySortKey.class})      /*CategorySortKey是一个例子*/

总结:使用Kryo进行数据的序列化是不是很简单;本片文章内容较短,在Spark项目中使用这个特性进行作业的优化也能够提升一定的效率。大家可以试着将其运用到自己的项目中去。本文到这里基本接近尾声,后续还会不断更新关于Spark作业优化的一些其他方式,欢迎关注。

如需转载,请注明:

z小赵 Spark性能调优篇四之使用Kryo进行序列化操作

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.11.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档