一、Spark 的序列化

序列化
Spark 是一个高性能、分布式的、基于内存计算的计算引擎,Spark 集群中包含多个节点,各节点之间要进行通信(比如数据传输,Spark 通过 RPC 进行节点间的通信),因而必定存在序列化(对象转字节数组)和反序列化(字节数组转对象)。


二、Java Serialization 和 Kryo Serialization

Spark 目前支持两种序列化机制:java native serializationkryo serialization默认使用的是Java native serialization。两者的区别:

类别 优点 缺点 备注
java native serialization 兼容性好、和scala更好融合 序列化性能较低、占用内存空间大(一般是Kryo Serialization 的10倍) 默认的serializer
Kryo Serialization 序列化速度快、占用空间小(即更紧凑) 不支持所有的Serializable类型、且需要用户注册要进行序列化的类class shuffle的数据量较大或者较为频繁时建议使用

三、Spark 中使用 Kryo Serialization

要在Spark 中使用 Kryo 完成序列化和反序列化,需要完成 3.1 和 3.2 两样配置:

3.1 将配置项spark.serializer设置为

关于配置项的设置优先级可以参考博客:https://www.jianshu.com/p/15cd9844c5a1

org.apache.spark.serializer.KryoSerializer
可以在配置文件spark-default.conf中添加该配置项(全局生效),比如:

spark.serializer   org.apache.spark.serializer.KryoSerializer

或者在业务代码中通过SparkConf进行配置(针对当前application生效),比如:

    val spark = SparkSession.builder().master("local[*]").appName("test").getOrCreate()val conf = new SparkConfconf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

又或者在spark-shell、spark-submit脚本中启动,可以在命令中加上:

--conf spark.serializer=org.apache.spark.serializer.KryoSerializer

3.2 注册自定义类(非必须,但是强烈建议做)

......
conf.registerKryoClasses(Array(classOf[Test1], classOf[Test2]))
// 其中Test1.java 和 Test2.java 是自定义的类

如果是scala类Test1(scala中的trait就相当于java中的接口):

class Test1 extends Serializable {......
}

如果是java类Test2:

public class Test2 implements Serializable {......
}

注意:虽说该步不是必须要做的(不做Kryo仍然能够工作),但是如果不注册的话,Kryo会存储自定义类中用到的所有对象的类名全路径,这将会导致耗费大量内存。

3.3 配置 spark.kryoserializer.buffer

如果要被序列化的对象很大,这个时候就最好将配置项spark.kryoserializer.buffer 的值(默认64k)设置的大些,使得其能够hold要序列化的最大的对象。

参考链接:https://www.jianshu.com/p/68970d1674fa

Spark 配置Kryo序列化机制注意细节相关推荐

  1. 【Spark】Spark的Kryo序列化

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

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

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

  3. spark之kryo 序列化

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

  4. spark 序列化_spark shell 配置 Kryo 序列化

    Spark 默认使用 Java Serialization 作为序列化方式,但是这种序列化方式一般会被认为性能和效率一般.因此 Spark 官方是推荐使用 Kryo 来代替默认的序列化方式的,为了便于 ...

  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. 在Spark中自定义Kryo序列化输入输出API(转)

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

  9. dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...

    用过dubbo的开发人员,在替换序列化时都会根据"经验"来选kryo为序列化框架,其原因是序列化协议非常高效,超过java原生序列化协议,hessian2协议,那kryo为什么高效 ...

最新文章

  1. PHP中阶,PHP进阶
  2. 【集训队互测2015】最大异或和
  3. 语音数据采集-实时语音数据可视化
  4. 需求规格说明书格式及要求
  5. Linux之Vim的搜索与替换
  6. JS---------正则表达式
  7. linux基础知识——exec函数
  8. neo4j 学习-2
  9. H3C 路由器的IPSEC ××× 配置
  10. 结巴分词有前空格_NLP 分词的那些事儿
  11. centos7---mysql5.7主从复制读写分离
  12. Ps 初学者教程,如何在图片中创造双色效果?
  13. centos 安装wget命令
  14. 大数据技术之Hadoop(入门)
  15. php计算器按钮功能,PHP实现的简单在线计算器功能示例
  16. 创新、协调、绿色、开放、共享”五大发展理念整体上是一个彼此之间有联系、成结构的体系,是统一的,而从个体上来说,他们之间是相互促进、相互依赖、相互作用、相互对立的,这恰恰体现出辩证法物质世界的普遍联系和
  17. 第三部分:成交动力学之十大成交激素——9、紧迫感
  18. 魔法书《SICP》的简明介绍 - 为什么要学习SICP
  19. 定时器-----每天定时删除临时文件
  20. 为什么说串行比并行快?

热门文章

  1. 云南省计算机一级理论知识试卷,云南省计算机一级考试模拟试题理论题型
  2. 【面试招聘】程序员面试完全指南
  3. 【Python基础】快速入门Python(讲解、习题)
  4. 【机器学习基础】机器学习理论最佳入门!周志华宝箱书搭档,开源教程《钥匙书-KeyBook》发布...
  5. 16 大常考算法知识点,你掌握了吗?
  6. 最常用的决策树算法(三):XGBoost 和 LightGBM
  7. 【论文学习】ICLR2021,鲁棒早期学习法:抑制记忆噪声标签ROBUST EARLY-LEARNING: HINDERING THE MEMORIZATION OF NOISY LABELS
  8. Netflix提出梯度提升决策树网络Hammock!
  9. RTC 融合通信服务架构与场景应用 | 2021稀土开发者大会音视频专场
  10. com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction