【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. 一次HTTP请求响应涉及了哪些?

    HTTP请求和响应步骤 TCP/IP协议 TCP三次握手 HTTP协议 HTTP请求报文 HTTP响应报文 TCP四次挥手 HTTP请求和响应步骤 以上完整表示了HTTP请求和响应的7个步骤,下面从T ...

  2. Scrum冲刺阶段4

    成员今日完成的任务 人员 任务 何承华 学习后端设计 陈宇 后端设计 丁培辉 学习后端设计 温志铭 日程添加界面设计(一半) 杨宇潇 日程添加界面设计(一半) 张主强 服务器构建 成员遇到的问题 人员 ...

  3. clion中配置glfw和glew

    clion中只能用cmake文件配置 最开始不清楚cmake语法走了不少弯路 如果遇到symbol(s) not found for architecture x86_64错误,百分百是cmake没配 ...

  4. Codeforces Round #555 (Div. 3) E. Minimum Array

    题意:b数组可以自由排序,c[i]=(a[i]+b[i])%n. 题目中要求c数组的字典序是最小的.那么我们需要尽量满足前面的c[i],才能使字典序最小. 我们知道a[i]和b[i]都是[0,n-1] ...

  5. P3805 【模板】manacher算法

    #include <bits/stdc++.h> #define up(i,l,r) for(register int i = (l);i <= (r); i++) #define ...

  6. 浅析列表页请求优化(history API)

    最近搞了下列表页请求的功能,并做了一下调研整理,记此文备忘. 列表页请求的功能到处可见,比如在博客园. 点击相应的页码,页面返回相应的内容,看上去似乎大同小异,但是一些小的细节还是可以区分优劣. fu ...

  7. Thread,ThreadPool,Task

    线程分为前台和后台.比如我们直接new一个Thread这就是前台线程. 前台线程一定会执行. 比如我们创建2个线程:1号,2号,同时执行,假设1号是主线程,1执行完了,依旧会等待2执行完成,整个程序才 ...

  8. android:动态申请权限(一)

    环境: android版本6.0 对应SDK版本23 动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明 步骤 1.新建一个android工程 默认创建即可 ...

  9. IDEL中easyui使用jstl和el出现传值不显示的问题

    <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding=& ...

  10. vue computed计算属性和watch监听属性解疑答惑

    computed计算属性     计算属性类似于方法,用于输出data中定义的属性数据的结果,data数据变化时,计算属性的结果会同步变化,需要注意的是计算属性不可与data定义的属性同名. 相比于方 ...