几乎所有的资料都显示kryo 序列化方式优于java自带的序列化方式,而且在spark2.*版本中都是默认采用kryo 序列化。因此本文将做kryo 做一个测试以验证其性能。

1.先给出定义:
    把对象转换为字节序列的过程称为对象的序列化。
    把字节序列恢复为对象的过程称为对象的反序列化。

通俗地说序列化就是把内存(jvm)中一个对象的状态通过网络传输,或者保存到磁盘上,反序列化与之相反。

2.spark中的序列化
那么对象以何种形式进行传输性能更好呢?
在spark2.0+版本的官方文档中提到:spark默认提供了两个序列化库:Java自身的序列化和Kryo序列化
官网的解释是:java序列化灵活,但是速度缓慢。Kryo序列化速度更快且更紧凑,但是支持的类型较少。
而且spark现在已经默认RDD在shuffle的时候对简单类型使用了Kryo序列化。

3.如何使用kryo 序列化
spark中已经包含了kryo库,使用kryo只需要注册即可。官网只提供了scala版本的,java版本的如下:

或者:System.setProperty("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
两者都可以用,但是我测试好像没起到什么效果。于是需要手动注册:

上图是关于kryo 的一些配置,可以单独注册自己的一个类,如紫色框线部分;
也可以像红色框线部分一样,自定义一个接口实现类MyKryoRegistrator,在这个类里面将所需的类全部注册。具体操作如下图:
如果需要序列化的类太多,就在这里逐一列举即可,当然被注册的类要实现java.io.Serializable,即:class TestKryo implements Serializable

4.序列化的效果
为了验证效果,我写了个test程序:

5.测试结果:
三种不同情况下的的RDD大小:
默认不序列化:2017.0 KB
在MyKryoRegistrator中序列化: 960.2 KB
只序列化demo.TestKryo:1053.0 KB

完。。。

spark之kryo 序列化相关推荐

  1. spark之kryo序列化及其使用

    spark之kryo序列化 spark之kryo 序列化 Spark 中使用 Kryo序列化 中文切词案例: spark之kryo 序列化 1.定义:把对象转换为字节序列的过程称为对象的序列化. 把字 ...

  2. 【Spark】Spark的Kryo序列化

    1.美图 2.Spark序列化概述 在Spark的架构中,在网络中传递的或者缓存在内存.硬盘中的对象需要进行序列化操作,序列化的作用主要是利用时间换空间: 分发给Executor上的Task 需要缓存 ...

  3. Spark 配置Kryo序列化机制注意细节

    一.Spark 的序列化 序列化 Spark 是一个高性能.分布式的.基于内存计算的计算引擎,Spark 集群中包含多个节点,各节点之间要进行通信(比如数据传输,Spark 通过 RPC 进行节点间的 ...

  4. 在Spark中自定义Kryo序列化输入输出API(转)

    原文链接:在Spark中自定义Kryo序列化输入输出API 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo serialization.在默认情况 ...

  5. spark(kryo)、hadoop(writable)、jdk(serializable)-序列化

    一.SRC 一个类在jvm中是有结构的,但即使是在jvm中,也是一堆数据.网络只能传文本,所以需要序列化和反序列化. 通过几种方式的序列化后文本输出到本地文件,可以对比下大小. 二.jdk的序列化 将 ...

  6. 广播变量kyro_利用Kryo序列化库是你提升Spark性能要做的第一件事

    本文基于Spark2.1.0版本 套用官文Tuning Spark中的一句话作为文章的标题: *Often, choose a serialization type will be the first ...

  7. Spark的RDD序列化

    RDD序列化 1. 闭包检查 从计算的角度, 算子以外的代码都是在Driver 端执行, 算子里面的代码都是在 Executor端执行.那么在 scala 的函数式编程中,就会导致算子内经常会用到算子 ...

  8. java kryo 序列化_java中的序列化方式及dubbo使用kryo序列化

    java中的序列化方式: 1. 自带序列化  ObjectInputSteam. ObjectOutStream等 2. hession2 3. json ,xml等格式 4.kryo 5.FST - ...

  9. avro和java原生序列化的区别,java原生序列化和Kryo序列化性能比较

    简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift, ...

最新文章

  1. 2分钟读懂Hadoop和Spark的异同
  2. linux下命令行打开文件管理器
  3. BeanShell快速入门---Java应用
  4. css原生样式支持,原生JS读写CSS样式的方法
  5. 2017计算机考试题上机,2017年计算机二级上机考试试题及答案
  6. 《PHP和MySQL Web开发从新手到高手(第5版)》一一1.7 万事俱备,摩拳擦掌
  7. win7 优化后的问题
  8. 全民 Transformer (一): Attention 在深度学习中是如何发挥作用的
  9. 14串聚合物锂电池保护板和电路图(带均衡功能)
  10. 最全的Java多线程面试题
  11. 精美的液晶数字字体素材
  12. java web 开发资料链接
  13. hadoop tyarn冲突_hadoop集群启动yarn时出现的问题和解决方法
  14. vue配置文件不打包
  15. python函数中变量LEGB原则
  16. Java+Swing+mysql用户信息管理系统
  17. 自然人如何开发票-以广西为例
  18. 【问题】不能加载 MSCOMCTL.OCX(机房问题)
  19. 由浅入深玩转华为WLAN—19 漫游系列(6)不同AC之间AP漫游的概述以及二三层漫游处理过程
  20. 法大大登榜《胡润中国瞪羚企业》

热门文章

  1. cad连筋字体怎么安装_CAD for MAC中怎么添加新字体?CAD for MAC全套字体(CAD全套字体)...
  2. CATIA 3DEXPERIENCE R2019x VBA开发介绍
  3. Python:python镜像源管理
  4. 钉钉审批回调 获取单个审批实例详情  遇见System.Collections.Generic.List`1[DRMS.DingTalk.FormRowValue+ExtendValue] 错误
  5. 欢迎使用CSDN-markdown编辑器现场的
  6. Cocos 2d-js 虚拟摇杆
  7. 多变量线性相关分析_如何测量多个变量之间的“非线性相关性”?
  8. 5款轻量级小软件,第一款更是近期必备!
  9. python os.walk 指定遍历深度_python遍历文件夹,指定遍历深度与忽略目录的方法
  10. redis服务器错误日志分析