【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性能 ...
随机推荐
- linux学习第十八天 (Linux就该这么学)
今天讲了23章节,OPENLDAP安装配置,感觉好难 ,不过考试测试,CA也没有了,主要还讲了数据库mariadb,安装,配置,使用,基本的数据库管理,还讲了,网络安装系统,我暂时先不写其它了,上传图 ...
- python学习——用dictionary实现通过地区查询邮编
刚刚学习了python的基本语法,对自己学习的内容进行实践下. dictionary字典(类似map) 总结:1.dictionary比list读取速度快,但是占用内存大,适合存放不需修改,经常查询的 ...
- Google资深工程师深度讲解Go语言完整教程
资源获取链接点击这里 欢迎大家来到深度讲解Go语言的课堂.本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的 ...
- CommonsChunkPlugin VS SplitChunksPlugin
等了好久终于等到你, webpack团队人员卧薪尝胆五个多月的时间终于带来的webpack4.0,个人觉得webpack4带来的最大优化便是对于懒加载块拆分的优化,删除了CommonsChunkPlu ...
- fiddler不能抓某些的包的原因
用fiddler抓某app的包时,死活抓不到,确定自己设置的没有错,并且让小A同事也看了一遍我的设置,确认没错后,又在小A同事那儿试了下还是抓不到 后来在网上找了很多资料,才发现是因为一些app使用了 ...
- C++标准库第二版笔记 2.1
C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...
- canvas绘制圆图输出图片格式
function drawCircleImage(url, callback) { const canvas = document.createElement('canvas'); const img ...
- 记录mysql安装过程遇到问题
1. 远程连接授权 登陆mysql数据库 (如果安装在系统盘可以直接命令, 否则要切换到安装目录..bin/) mysql -u root -p mysql> use mysql; - ...
- 移动端canvas文字图片合成并生成图片(canvas宽度自适应移动端屏幕)
这是我之前做的一个关于文字图片合成的代码,供大家参考,不足支出还望体谅:具体的注释在代码里都有,有什么不懂了可以留言互相交流.<!DOCTYPE html> <html lang=& ...
- 利用AnyProxy代理监控APP流量
1.介绍 AnyProxy 是阿里巴巴基于 Node.js 开发的一款开源代理服务器. 代理服务器站在客户端和服务端的中间,它可以收集双方通信的每个比特.一个完整的代理请求过程为:客户端首先与代理服务 ...