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

        接着上一篇文章,今天介绍一下通过使用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进行序列化操作

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏祝威廉

Spark会把数据都载入到内存么?

很多初学者其实对Spark的编程模式还是RDD这个概念理解不到位,就会产生一些误解。

932
来自专栏CSDN技术头条

Spark之RDD详解

RDD 概念与特性 RDD是Spark最重要的抽象。spark统一建立在抽象的RDD之上。设计一个通用的编程抽象,使得spark可以应对各种场合的大数据情景。R...

2896
来自专栏LhWorld哥陪你聊算法

【Spark篇】--Spark中的宽窄依赖和Stage的划分

父RDD和子RDD partition之间的关系是一对一的。或者父RDD一个partition只对应一个子RDD的partition情况下的父RDD和子RDD ...

1971
来自专栏about云

spark入门基础知识常见问答整理

一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpa...

35410
来自专栏知识分享

串口通信DMA中断

这是以前学32的时候写的,那时候学了32之后感觉32真是太强大了,比51强的没影。关于dma网上有许多的资料,亲们搜搜,这里只贴代码了,其实我也想详详细细地叙述...

3237
来自专栏xingoo, 一个梦想做发明家的程序员

Structured Streaming教程(1) —— 基本概念与使用

在有过1.6的streaming和2.x的streaming开发体验之后,再来使用Structured Streaming会有一种完全不同的体验,尤其是在代码设...

1341
来自专栏斑斓

大数据 | 理解Spark的核心RDD

与许多专有的大数据处理平台不同,Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streami...

3909
来自专栏about云

spark零基础学习线路指导【包括spark2】

问题导读 1.你认为spark该如何入门? 2.你认为spark入门编程需要哪些步骤? 3.本文介绍了spark哪些编程知识?

1003
来自专栏一名叫大蕉的程序员

Spark你一定学得会(二)No.8

第一次分享的妥妥就是入门的干货,小伙伴们最好可以自己敲一敲代码,不然只看我的分享一点用都木有。但还是有很多小伙伴表示看不懂,没关系,慢慢来自己操作一遍有什么问题...

19210
来自专栏北京马哥教育

Spark:一个高效的分布式计算系统

马哥linux运维 | 最专业的linux培训机构 ---- 概述 什么是Spark Spark是UC Berkeley AMP lab所开源的类Hado...

4376

扫码关注云+社区

领取腾讯云代金券