【Spark调优】Kryo序列化
【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调优】Kryo序列化的更多相关文章
- 【Spark学习】Apache Spark调优
Spark版本:1.1.0 本文系以开源中国社区的译文为基础,结合官方文档翻译修订而来,转载请注明以下链接: http://www.cnblogs.com/zhangningbo/p/4117981. ...
- 【Spark调优】提交job资源参数调优
[场景] Spark提交作业job的时候要指定该job可以使用的CPU.内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断.失败等问题,所以对Spark的job资源参数分配调优非常重要 ...
- 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优
一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体 1.代码调优 1.避免创建重复的RDD,尽 ...
- 【翻译】Spark 调优 (Tuning Spark) 中文版
由于Spark自己的调优guidance已经覆盖了很多很有价值的点,因此这里直接翻译一份过来.也作为一个积累. Spark 调优 (Tuning Spark) 由于大多数Spark计算任务是在内存中运 ...
- Spark调优_性能调优(一)
总结一下spark的调优方案--性能调优: 一.调节并行度 1.性能上的调优主要注重一下几点: Excutor的数量 每个Excutor所分配的CPU的数量 每个Excutor所能分配的内存量 Dri ...
- Spark 调优(转)
Spark 调优 返回原文英文原文:Tuning Spark Because of the in-memory nature of most Spark computations, Spark pro ...
- Spark调优秘诀——超详细
版权声明:本文为博主原创文章,转载请注明出处. Spark调优秘诀 1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个 ...
- Spark调优指南
Spark相关问题 Spark比MR快的原因? 1) Spark的计算结果可以放入内存,支持基于内存的迭代,MR不支持. 2) Spark有DAG有向无环图,可以实现pipeline的计算模式. 3) ...
- 5. Spark调优
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第五部分是讲的是Spark调优相关的知识点. 一.并行度调优 二.序列化格式优化 三.内存管理优化 四.Spark SQL性能 ...
随机推荐
- Node.js server-side javascript cpu占用高
也不知道微软咋想的,不搞死我们的电脑不罢休 https://developercommunity.visualstudio.com/content/problem/27033/nodejs-serve ...
- C#下载Url文件到本地
protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...
- EmWin 文本显示函数
函数模型----------------------------------- 1:void GUI_DispChar(U16 c): 在当前窗口的当前文本位置处,使用当前字体显示单个字符. c ...
- TypeError: 'range' object does not support item assignment处理方法
vectorsum.py#!/usr/bin/env/pythonimport sysfrom datetime import datetimeimport numpy as np # def num ...
- 关于numpy中的函数return中加入字符串类型数据后,小数点精度变化
weekdays.pyimport numpy as npfrom datetime import datetimedef datestr2num(s): return datetime.strpti ...
- 从Excel表中导入数据时日期格式的验证问题解决
#region IsDateTimeType 私有方法判断导入数据是否是日期格式 /// <summary> /// 私有方法判断导入数据是否是日期格式 /// </summary& ...
- javafx安装
可在官网http://efxclipse.bestsolution.at/ 下载 其中http://efxclipse.bestsolution.at/install.html#all-in-one ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
- s6-8 TCP 拥塞控制
TCP 拥塞控制 虽然网络层也试图管理拥塞,但是,大多数繁重的任务是由TCP来完成的,因为针对拥塞的真正解决方案是减慢数据率 分组守恒:当有一个老的分组离开之后才允许新的分组注入网络 TC ...
- 【Spring】SpringMVC配置文件
SpringMVC中一般会引入三个配置文件applicationContext.xml.dispatcher-servlet.xml(SpringMVC-servlet.xml).web.xml 1. ...