spark kryo java_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设置为
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 SparkConf
conf.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要序列化的最大的对象。
水平有限,如有错误,敬请指正!
spark kryo java_Spark 配置Kryo序列化机制相关推荐
- Spark 配置Kryo序列化机制注意细节
一.Spark 的序列化 序列化 Spark 是一个高性能.分布式的.基于内存计算的计算引擎,Spark 集群中包含多个节点,各节点之间要进行通信(比如数据传输,Spark 通过 RPC 进行节点间的 ...
- dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...
用过dubbo的开发人员,在替换序列化时都会根据"经验"来选kryo为序列化框架,其原因是序列化协议非常高效,超过java原生序列化协议,hessian2协议,那kryo为什么高效 ...
- kryo java_优化Java序列化– Java,XML,JSON,Kryo,POF
kryo java 也许我很天真,但是我一直认为Java序列化肯定是将Java对象序列化为二进制形式的最快,最有效的方法. 毕竟Java是第7个主要发行版,所以这不是新技术,而且由于每个JDK似乎都比 ...
- 分布式系统开发工具包 —— 基于Kryo的Java对象序列化
Kryo是用于Java语言的一个快速和高效的对象图序列化框架.Kryo项目的目的是快速.高效.方便地使用API.当需要持久化对象的时候,不论是持久化到文件.数据库还是网络,都可以使用Kryo. 目前K ...
- java 序列化工具kryo_java jackson avro kryo等几种序列化与反序列化工具的使用
最近由于工作需要,需要研究常用的集中序列化方式,主要目的是对象序列化后占用空间会大大减少,便于存储和传输,下面是几种序列化方式的使用demo 1. Java自带的Serialize 依赖jar包:无 ...
- kryo、fst实现序列化
一.fst 介绍:FST fast-serialization 是重新实现的 Java 快速对象序列化的开发包 开源地址:https://gitee.com/mirrors/fst 依赖: <! ...
- Strom序列化机制
Storm 中的 tuple可以包含任何类型的对象.由于Storm 是一个分布式系统,所以在不同的任务之间传递消息时Storm必须知道怎样序列化.反序列化消息对象. Storm 使用 Kryo库对对象 ...
- java 序列化 protobuf_java序列化机制之protobuf(快速高效跨语言)
我们之前曾讲过java自带的一种序列化机制,但是这种机制效率太低,有很多缺点.因此也涌现出了很多优秀的系列化框架,比如说protobuf.protostuff.thrift.hession.kryo. ...
- [以浪为码]Spark源码阅读03 - 序列化介绍 serializer
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013054888/article/details/90237348 系列文章专栏目录:小浪阅读 S ...
- SpringBoot高级-缓存-RedisTemplate序列化机制
前面我们就搭建测试好了redis环境,接下来我们就来整合redis来做缓存,我们需要引入redis的starter,这个starter我们直接去官方文档去搜索就行了,我们来找到所有的starter跟r ...
最新文章
- Jvm面试题及答案 100道(持续更新)
- maven配置文件 pom.xml
- mysql 强制索引循序_mysql 强制走索引
- sessionStorage 、localStorage 和 cookie 之间的区别(转)
- 408最后计算机网络题库,2021考研计算机统考408专业基础综合题库
- 信息学奥赛一本通 2053:【例3.3】三个数
- PAT乙级(1001 害死⼈不偿命的(3n+1)猜想)
- oracle to_date 大写,oracle账号区分大小写吗2015第一博,Oracle时间段查询,TO_DATE和TO_CHAR使用对比...
- 进程间通信(匿名管道、命名管道、共享内存)
- Velocity中避免null引起的数据问题
- if函数python_关于函数:如何在python中为一个if语句提供多个条件
- ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
- 年轻人逃离推荐算法围城:老年版App,用着真香
- Min(BZOJ 1441)
- [转]输入框对齐问题
- 环境配置之:pip 一步到位解决 pytorch-gpu 安装
- OpenRefine数据清洗实战
- 嵌入式开发 | 单片机产品开发流程及学习方法
- android -------- ConstraintLayout 宽高比和偏移量比(三)
- Java九阳神功-内部类