Spark 配置Kryo序列化机制注意细节
一、Spark 的序列化
序列化
Spark 是一个高性能、分布式的、基于内存计算的计算引擎,Spark 集群中包含多个节点,各节点之间要进行通信
(比如数据传输,Spark 通过 RPC 进行节点间的通信),因而必定存在序列化
(对象转字节数组)和反序列化
(字节数组转对象)。
二、Java Serialization 和 Kryo Serialization
Spark 目前支持两种序列化机制:java native serialization
和 kryo 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序列化机制注意细节相关推荐
- 【Spark】Spark的Kryo序列化
1.美图 2.Spark序列化概述 在Spark的架构中,在网络中传递的或者缓存在内存.硬盘中的对象需要进行序列化操作,序列化的作用主要是利用时间换空间: 分发给Executor上的Task 需要缓存 ...
- spark之kryo序列化及其使用
spark之kryo序列化 spark之kryo 序列化 Spark 中使用 Kryo序列化 中文切词案例: spark之kryo 序列化 1.定义:把对象转换为字节序列的过程称为对象的序列化. 把字 ...
- spark之kryo 序列化
几乎所有的资料都显示kryo 序列化方式优于java自带的序列化方式,而且在spark2.*版本中都是默认采用kryo 序列化.因此本文将做kryo 做一个测试以验证其性能. 1.先给出定义: ...
- spark 序列化_spark shell 配置 Kryo 序列化
Spark 默认使用 Java Serialization 作为序列化方式,但是这种序列化方式一般会被认为性能和效率一般.因此 Spark 官方是推荐使用 Kryo 来代替默认的序列化方式的,为了便于 ...
- spark(kryo)、hadoop(writable)、jdk(serializable)-序列化
一.SRC 一个类在jvm中是有结构的,但即使是在jvm中,也是一堆数据.网络只能传文本,所以需要序列化和反序列化. 通过几种方式的序列化后文本输出到本地文件,可以对比下大小. 二.jdk的序列化 将 ...
- 广播变量kyro_利用Kryo序列化库是你提升Spark性能要做的第一件事
本文基于Spark2.1.0版本 套用官文Tuning Spark中的一句话作为文章的标题: *Often, choose a serialization type will be the first ...
- Spark的RDD序列化
RDD序列化 1. 闭包检查 从计算的角度, 算子以外的代码都是在Driver 端执行, 算子里面的代码都是在 Executor端执行.那么在 scala 的函数式编程中,就会导致算子内经常会用到算子 ...
- 在Spark中自定义Kryo序列化输入输出API(转)
原文链接:在Spark中自定义Kryo序列化输入输出API 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo serialization.在默认情况 ...
- dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...
用过dubbo的开发人员,在替换序列化时都会根据"经验"来选kryo为序列化框架,其原因是序列化协议非常高效,超过java原生序列化协议,hessian2协议,那kryo为什么高效 ...
最新文章
- PHP中阶,PHP进阶
- 【集训队互测2015】最大异或和
- 语音数据采集-实时语音数据可视化
- 需求规格说明书格式及要求
- Linux之Vim的搜索与替换
- JS---------正则表达式
- linux基础知识——exec函数
- neo4j 学习-2
- H3C 路由器的IPSEC ××× 配置
- 结巴分词有前空格_NLP 分词的那些事儿
- centos7---mysql5.7主从复制读写分离
- Ps 初学者教程,如何在图片中创造双色效果?
- centos 安装wget命令
- 大数据技术之Hadoop(入门)
- php计算器按钮功能,PHP实现的简单在线计算器功能示例
- 创新、协调、绿色、开放、共享”五大发展理念整体上是一个彼此之间有联系、成结构的体系,是统一的,而从个体上来说,他们之间是相互促进、相互依赖、相互作用、相互对立的,这恰恰体现出辩证法物质世界的普遍联系和
- 第三部分:成交动力学之十大成交激素——9、紧迫感
- 魔法书《SICP》的简明介绍 - 为什么要学习SICP
- 定时器-----每天定时删除临时文件
- 为什么说串行比并行快?
热门文章
- 云南省计算机一级理论知识试卷,云南省计算机一级考试模拟试题理论题型
- 【面试招聘】程序员面试完全指南
- 【Python基础】快速入门Python(讲解、习题)
- 【机器学习基础】机器学习理论最佳入门!周志华宝箱书搭档,开源教程《钥匙书-KeyBook》发布...
- 16 大常考算法知识点,你掌握了吗?
- 最常用的决策树算法(三):XGBoost 和 LightGBM
- 【论文学习】ICLR2021,鲁棒早期学习法:抑制记忆噪声标签ROBUST EARLY-LEARNING: HINDERING THE MEMORIZATION OF NOISY LABELS
- Netflix提出梯度提升决策树网络Hammock!
- RTC 融合通信服务架构与场景应用 | 2021稀土开发者大会音视频专场
- com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction