美文网首页
Spark 配置Kryo序列化机制

Spark 配置Kryo序列化机制

作者: alexlee666 | 来源:发表于2019-11-01 16:44 被阅读0次

一、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 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序列化机制

    一、Spark 的序列化 序列化Spark 是一个高性能、分布式的、基于内存计算的计算引擎,Spark 集群中包含...

  • Spark Core 性能调优之数据序列化

    操作场景 spark支持两种方式的序列化: ● Java 原生序列化 JavaSerializer ● Kryo ...

  • Kryo

    使用Kryo序列化和反序列化https://github.com/EsotericSoftware/kryo工具类:

  • kryo序列化使用及踩坑过程

    kryo序列化使用及采坑 1、kryo序列化使用过程 (1)、导入依赖

  • 5.6-RedisTemplate 序列化机制配置实战—小滴课堂

    RedisTemplate 序列化机制配置实战 简介:自定义序列化和反序列化机制配置实战 配置实战 @Config...

  • Storm性能优化

    性能优化1:kryo序列化 定制序列化 自定义的bolt之间emit数据是实体类的时候,注册kryo Storm ...

  • KryoCocoa

    什么是Kryo Kryo 是一个快速高效的Java对象图形序列化框架,主要特点是性能、高效和易用。该项目用来序列化...

  • HBase和Kryo混合使用时出现的jar包冲突

    HBase 1.1.2 + Kryo 4.0.1组合使用,kryo将数据序列化为byte数组后入到HBase中,查...

  • 浅析kryo

    kryo是一个高性能的序列化/反序列化工具,由于其变长存储特性并使用了字节码生成机制,拥有较高的运行速度和较小的体...

  • RDD算子之后

    RDD序列化 闭包检查 Kryo序列化框架 Java的序列化能够序列化任何的类。单比较重(字节多),序列化后,对象...

网友评论

      本文标题:Spark 配置Kryo序列化机制

      本文链接:https://www.haomeiwen.com/subject/fjtqbctx.html