【Java序列化与反序列化】

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
序列化使用场景:
1.数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)。
2.远程通信,即在网络上传送对象的字节序列。

这篇文章写的不错https://blog.csdn.net/wangloveall/article/details/7992448

【Spark序列化与反序列化场景】

在Spark中,主要有三个地方涉及序列化与反序列化:
1.在算子中使用到广播变量broadcast时,该变量会被序列化后进行网络传输。
2.自定义对象的类型作为RDD的泛型类型时,例如JavaRDD<Student>,所有自定义类型对象,都会进行序列化,所以要求自定义类必须实现Serializable接口。
3.使用可序列化的持久化策略时,例如MEMORY_ONLY_SER,Spark会将RDD中的每个partition都序列化成一个大的字节数组。

【Spark序列化与反序列化机制】

  Spark默认使用的是Java的序列化机制,也就是ObjectOutputStream、ObjectInputStream API来进行序列化和反序列化。

  Spark也支持使用Kryo序列化库,Kryo序列化类库的性能比Java序列化类库的性能要高很多。据官方介绍,Kryo序列化机制比Java序列化机制性能高10倍左右。

  那么,对于上述3种Spark有序列化处理的方法,建议使用Kryo序列化类库,优化序列化和反序列化的性能。

  Spark之所以默认没有使用Kryo作为序列化类库,是因为Kryo要求最好要注册所有需要进行序列化的自定义类型,使用上略微繁琐,但并不麻烦。

【Spark使用Kryo序列化与反序列化】

例如,Student和School是自定义的2个类,Kryo使用注意点

SparkConf().set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

Scala:
val conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Array(classOf[Student], classOf[School]))
val sc = new SparkContext(conf) Java:
SparkConf conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Student.class, School.class)
JavaSparkContext sc = new JavaSparkContext(conf)

  此外

  1.Spark参数 spark.kryoserializer.buffer.mb=2,默认值为2,是指配置Kryo默认最大能缓存2M的对象,然后再进行序列化。

  如果注册的要序列化的自定义的Class类型,本身特别大,比如包含的属性过百,会导致要序列化的对象过大。此时,可使用SparkConf.set()方法,设置spark.kryoserializer.buffer.mb参数的值,将其调大来解决。

  2.在SparkStreaming2.4.0与Kafka2.1.1集成编码中遇到过一个问题:开始没指定序列化,日志中看到有Serialize的报错,抱着试试看的心态,设置为kryo序列化方式,set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"),问题得以解决。

  我的代码实践:https://github.com/wwcom614/Spark

  下一篇:【Spark调优】提交job资源参数调优

  上一篇:【Spark调优】内存模型与参数调优

【Spark调优】Kryo序列化的更多相关文章

  1. 【Spark学习】Apache Spark调优

    Spark版本:1.1.0 本文系以开源中国社区的译文为基础,结合官方文档翻译修订而来,转载请注明以下链接: http://www.cnblogs.com/zhangningbo/p/4117981. ...

  2. 【Spark调优】提交job资源参数调优

    [场景] Spark提交作业job的时候要指定该job可以使用的CPU.内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断.失败等问题,所以对Spark的job资源参数分配调优非常重要 ...

  3. 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优

    一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体    1.代码调优 1.避免创建重复的RDD,尽 ...

  4. 【翻译】Spark 调优 (Tuning Spark) 中文版

    由于Spark自己的调优guidance已经覆盖了很多很有价值的点,因此这里直接翻译一份过来.也作为一个积累. Spark 调优 (Tuning Spark) 由于大多数Spark计算任务是在内存中运 ...

  5. Spark调优_性能调优(一)

    总结一下spark的调优方案--性能调优: 一.调节并行度 1.性能上的调优主要注重一下几点: Excutor的数量 每个Excutor所分配的CPU的数量 每个Excutor所能分配的内存量 Dri ...

  6. Spark 调优(转)

    Spark 调优 返回原文英文原文:Tuning Spark Because of the in-memory nature of most Spark computations, Spark pro ...

  7. Spark调优秘诀——超详细

    版权声明:本文为博主原创文章,转载请注明出处. Spark调优秘诀 1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个 ...

  8. Spark调优指南

    Spark相关问题 Spark比MR快的原因? 1) Spark的计算结果可以放入内存,支持基于内存的迭代,MR不支持. 2) Spark有DAG有向无环图,可以实现pipeline的计算模式. 3) ...

  9. 5. Spark调优

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第五部分是讲的是Spark调优相关的知识点. 一.并行度调优 二.序列化格式优化 三.内存管理优化 四.Spark SQL性能 ...

随机推荐

  1. 如何将一个excel表格的数据匹配到另一个表中

    我们在操作excel表的时,有时需要将一个excel表中的数据匹配到另一个表中,那么就需要用到VLOOKUP函数,VLOOKUP函数是Excel中的一个纵向查找函数,VLOOKUP是按列查找,最终返回 ...

  2. java中函数的参数传递

    转载  https://www.cnblogs.com/lixiaolun/p/4311863.html 转载https://www.cnblogs.com/wutianqi/p/8723582.ht ...

  3. 基于grafana+telegraf的服务器监控方案

    准备工作:安装InfluxDb 1 Windows 1.1 下载agent      https://dl.influxdata.com/telegraf/releases/telegraf-1.10 ...

  4. python -----一个简单的小程序(监控电脑内存,cpu,硬盘)

    一个简单的小程序 用函数实现!~~ 实现: cpu 使用率大于百分之50 时  ,  C 盘容量不足5 G 时, 内存 低于2G 时. 出现以上其中一种情况,发送自动报警邮件! 主要运用 到了两个 模 ...

  5. 02.02.02 第2章 制作power bi图表(Power BI商业智能分析)

    ---恢复内容开始--- 02.02.02第2章 制作power bi图表 02.02.02.01 power pivot数据导入 00:08:43 02.02.02.02建立数据透视表 00:11: ...

  6. 安装rabbtimq CentOS 7

    朋友们 今天安装rabbtimq  在安装完以后就是一直报错.一直启动不起来了.最后看到别人写到.centos 7  与 centos 6.下载的rabbitmq是不一样的. https://dl.b ...

  7. Settings 参数记录

    DOWNLOAD_FAIL_ON_DATALOSS : 参数:TRUE.FALSE 如果设置为 True : scrapy.Request 有一个 errback 参数, 当 Request 请求出错 ...

  8. sflow介绍与安装过程

    介绍: sFlow技术是一种以设备端口为基本单元的数据流随机采样的流量监控技术,不仅可以提供完整的第二层到第四层甚至全网范围内的实时流量信息,而且可以适应超大网络流量(如大于10Gbit/s)环境下的 ...

  9. dialog记录

    .gyzq{ &.dialog{ background: rgba(83,83,83,0.50); width: 100%; height: 100%; position: fixed; ov ...

  10. day_8文件的操作

    首先昨天讲的内容有 类型转换 1:数字类型: int ()  bool()  float() 2:str 与int:    int('10') | int('-10') | int('0') | fl ...