一、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序列化机制相关推荐

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

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

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

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

  3. kryo java_优化Java序列化– Java,XML,JSON,Kryo,POF

    kryo java 也许我很天真,但是我一直认为Java序列化肯定是将Java对象序列化为二进制形式的最快,最有效的方法. 毕竟Java是第7个主要发行版,所以这不是新技术,而且由于每个JDK似乎都比 ...

  4. 分布式系统开发工具包 —— 基于Kryo的Java对象序列化

    Kryo是用于Java语言的一个快速和高效的对象图序列化框架.Kryo项目的目的是快速.高效.方便地使用API.当需要持久化对象的时候,不论是持久化到文件.数据库还是网络,都可以使用Kryo. 目前K ...

  5. java 序列化工具kryo_java jackson avro kryo等几种序列化与反序列化工具的使用

    最近由于工作需要,需要研究常用的集中序列化方式,主要目的是对象序列化后占用空间会大大减少,便于存储和传输,下面是几种序列化方式的使用demo 1. Java自带的Serialize 依赖jar包:无 ...

  6. kryo、fst实现序列化

    一.fst 介绍:FST fast-serialization 是重新实现的 Java 快速对象序列化的开发包 开源地址:https://gitee.com/mirrors/fst 依赖: <! ...

  7. Strom序列化机制

    Storm 中的 tuple可以包含任何类型的对象.由于Storm 是一个分布式系统,所以在不同的任务之间传递消息时Storm必须知道怎样序列化.反序列化消息对象. Storm 使用 Kryo库对对象 ...

  8. java 序列化 protobuf_java序列化机制之protobuf(快速高效跨语言)

    我们之前曾讲过java自带的一种序列化机制,但是这种机制效率太低,有很多缺点.因此也涌现出了很多优秀的系列化框架,比如说protobuf.protostuff.thrift.hession.kryo. ...

  9. [以浪为码]Spark源码阅读03 - 序列化介绍 serializer

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013054888/article/details/90237348 系列文章专栏目录:小浪阅读 S ...

  10. SpringBoot高级-缓存-RedisTemplate序列化机制

    前面我们就搭建测试好了redis环境,接下来我们就来整合redis来做缓存,我们需要引入redis的starter,这个starter我们直接去官方文档去搜索就行了,我们来找到所有的starter跟r ...

最新文章

  1. Jvm面试题及答案 100道(持续更新)
  2. maven配置文件 pom.xml
  3. mysql 强制索引循序_mysql 强制走索引
  4. sessionStorage 、localStorage 和 cookie 之间的区别(转)
  5. 408最后计算机网络题库,2021考研计算机统考408专业基础综合题库
  6. 信息学奥赛一本通 2053:【例3.3】三个数
  7. PAT乙级(1001 害死⼈不偿命的(3n+1)猜想)
  8. oracle to_date 大写,oracle账号区分大小写吗2015第一博,Oracle时间段查询,TO_DATE和TO_CHAR使用对比...
  9. 进程间通信(匿名管道、命名管道、共享内存)
  10. Velocity中避免null引起的数据问题
  11. if函数python_关于函数:如何在python中为一个if语句提供多个条件
  12. ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
  13. 年轻人逃离推荐算法围城:老年版App,用着真香
  14. Min(BZOJ 1441)
  15. [转]输入框对齐问题
  16. 环境配置之:pip 一步到位解决 pytorch-gpu 安装
  17. OpenRefine数据清洗实战
  18. 嵌入式开发 | 单片机产品开发流程及学习方法
  19. android -------- ConstraintLayout 宽高比和偏移量比(三)
  20. Java九阳神功-内部类

热门文章

  1. 【刷题篇】鹅厂文化衫问题
  2. 空气质量提醒 BMI指数计算 Python123题解
  3. Android 伪装IP 亲测可行
  4. 《Plants Vs Zombies(植物大战僵尸)》游戏存档修改
  5. WorkMan学习篇:三
  6. 项目实战 - tpshop商城项目环境搭建
  7. Halcon知识:binocular_disparity(双目视差)
  8. 太完美 TWM000极度精简版XP20130123终结美化版
  9. linux中如何开启vnc服务端口,Linux下vnc配置及启动
  10. 计算机网络说明文,《Wi-Fi》初中说明文阅读题及答案