Spark性能优化第四季

1、序列化
2、JVM性能调优
一、Spark性能调优之序列化
1、之所以进行序列化,最重要的原因是内存空间有限(减少GC的压力,最大化的避免Full GC的产生,因为一旦产生Full GC,则整个Task处于停止状态)、减少磁盘IO的压力,减少网络IO的压力
2、什么时候会必要的产生序列化和反序列化呢?发生磁盘IO和网络通信的时候会序列化和反序列化;更为重要的考虑序列化和反序列化的时候有另外两种情况:
a)persist(Checkpoint)的时候必须考虑序列化和反序列化,例如说cache到内存的时候只能使用JVM分配的60%的内存空间,此时好的序列化机制就至关重要了
b)编程的时候,使用算子的函数操作如果传入了外部数据就必须序列化和反序列化

#以下代码是错误的
val person = new Person()
rdd.map(item => person.add(item))

3、强烈建议使用Kryo序列化器进行序列化和反序列化;Spark默认情况下不是使用的Kyro而是Java自带的序列化器ObjectInputStream和ObjectOutputStream(主要是考虑了方便性或者通用性),默认情况下如果自定义了RDD中数据的类型则必须实现serializable接口,当然也可以实现自己的序列化接口Externalizable来实现更加高效的Java序列化算法;采用默认的ObjectInputStream和ObjectOutputStream会导致序列化后的数据占用大量的内存、磁盘或网络,并且在序列化和反序列化的时候比较消耗CPU
4、强烈推荐大家采用Kryo序列化机制,Spark下使用Kryo序列化机制会比Java默认的序列化机制更加节省空间(节省近10倍的空间)以及消耗更少的CPU,强烈建议在一切情况下尽可能使用Kryo序列化机制。
5、使用Kryo的两种方式:
a)在spark-defaults.conf中配置
b)在程序的SparkConf中配置。

conf.set(spark.serializer org.apache.spark.serializer.KryoSerializer)

使用Kryo可以更加快速,更低存储空间占用量以及更高性能的方式来进行序列化。
6、Spark中Scala常用的类型自动的通过AllScalaRegistry注册给了Kryo进行序列化管理;
7、如果是自定义的类型必须注册给序列化器,例如

conf.set(spark.serializer org.apache.spark.serializer.KryoSerializer)
conf.registryKryoClass(Array(classOf[Person]))
val person = new Person()
rdd.map(item => person.add(item))

8、Kryo在序列化的时候缓存空间默认大小是2MB,可以根据具体的业务模型调整该大小,具体方式:
设置spark.kryoserializer.buffer为10MB等
9、在使用Kryo时,强烈建议注册时写完整的包名和类名,否则的话每次序列化的时候都会保存一份整个包名和类名的完整信息,这就会不必要的消耗内存空间
二、Spark JVM性能调优
1、好消息是Spark的钨丝计划是用来专门解决JVM性能问题的,不好的消息是至少在Spark 2.0以前钨丝计划功能不稳定且只能在特定情况下发生作用,也就是说包括Spark 1.6.0在内的Spark及其以前的版本我们大多数情况下没有使用钨丝计划的功能,所以此时就必须关注JVM性能调优;
2、JVM性能调优的关键是调优GC。为什么GC如此重要?主要是因为Spark热衷于RDD的持久化。GC本身的性能开销是和数据量成正比的
3、初步可以考虑是尽量多的使用array和String,并且在序列化机制方面尽可能地采用Kryo,让每个partition都成为字节数组;
4、监视GC的基本方式有两种
a)配置

spark.executor.extraJavaOptions = -verbose:gc -XX:-PrintGCDetails -XX:+ PrintGCDateTimeStamps

b)SparkUI
5、Spark在默认情况下使用60%的空间来进行Cache缓存RDD的内容,也就是说Task在执行的时候只能使用剩下的40%;如果空间不够用就会(频繁)触发GC
可以设置spark.memory.fraction参数来进行调整空间的使用,例如降低Cache空间,让Task使用更多的空间来创建对象和完成计算;
再一次强烈建议对RDD进行Cache的时候使用Kryo序列化机制,从而给Task分配更大的空间来顺利完成计算(避免频繁的GC)
6、因为在老年代空间满的时候会发生Full GC操作,而老年代空间中基本都是活的比较久的对象(经历数次GC依旧存在),此时会停下所有程序线程,进行Full GC,对Old区中的对象进行整理,严重影响性能;此时可以考虑:
a)设置spark.memory.fraction参数来进行调整空间的使用从而给年轻代更多的空间用于存放短时间的存活的对象;
b)-Xmn调整Eden区域;RDD中操作的对象和数据进行大小评估,如果在HDFS上解压后一般体积可能会变成原有体积的3倍左右;根据数据的大小来设置Eden;如果有10个Task,每个Task处理的HDFS上的数据是128MB,则需要设置-Xmn为10*128*3*4/3的大小。
c)-XX:SupervisorRatio 在Eden不出问题的情况下适当调大s1、s2的大小
d)-XX:NewRatio

大数据IMF传奇行动绝密课程第48课:Spark性能优化第四季相关推荐

  1. 大数据IMF传奇行动绝密课程第45课:Spark性能优化第一季

    Spark性能优化第一季 1.Spark性能优化需要思考的基本问题 2.CPU和Memory 3.并行度和Task 4.网络 一.Spark性能优化核心基石 1.Spark是采用Master-Slav ...

  2. 大数据IMF传奇行动绝密课程第104-114课:Spark Streaming电商广告点击综合案例

    Spark Streaming电商广告点击综合案例 需求分析和技术架构 广告点击系统实时分析 广告来自于广告或者移动App等,广告需要设定在具体的广告位,当用户点击广告的时候,一般都会通过ajax或S ...

  3. 2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》 畅销书籍 清华大学出版社发行上市!

    2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作<SPARK大数据商业实战三部曲>畅销书籍 清华大学出版社发行上市! 本书基于Spark 2.2.0新版本,以Spark商业案例实战 ...

  4. 基于问题导向与成果产出的教学模式:《大数据与城市规划》特色课程

    [ 编者按 ]2015年12月,清华大学推出"大数据能力提升项目",旨在促进大数据人才培养,服务国家大数据发展战略.项目由清华-青岛数据科学研究院(以下简称:数据院)和研究生院共同 ...

  5. 大数据技术原理与应用课程建设经验分享

    大数据技术原理与应用课程 建设经验分享 林子雨 厦门大学信息科学与技术学院, 福建 厦门 361005   摘要:大数据专业人才的培养是世界各国新一轮科技较量的基础,高等院校承担着大数据人才培养的重任 ...

  6. 云计算大数据学习中心:python课程 01

    云计算大数据学习中心:python课程 我的第一节python课程 学习内容: 一.计算机的组成. 硬件:输入输出设备.CPU.存储设备. 软件:系统软件(操作系统.驱动程序).应用程序. 二.编程语 ...

  7. 大数据开发需要掌握哪些课程

    根据国内的发展形势,大数据未来的发展前景会非常好.自 2018 年企业纷纷开始数字化转型,一二线城市对大数据领域的人才需求非常强烈,未来几年,三四线城市的人才需求也会大增. 在大数据领域,国内发展的比 ...

  8. 电子沙盘数字沙盘大数据可视化GIS系统开发教程第16课

    电子沙盘数字沙盘大数据可视化GIS系统开发教程第16课:新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格. public bool Atmosphe ...

  9. spark大数据计算引擎原理深剖(优缺点)-spark简介

    用spark,你仅仅只是调用spark的API肯定是很low的. 今天来讲讲spark的原理,并且会针对部分源码进行讲解,如有不同意见请联系本人交流探讨. 目前大数据生态主要部分是Hadoop软件框架 ...

最新文章

  1. 王者荣耀装备测试软件,王者荣耀首度公开5v5 PVP自动化测试方案
  2. 普林斯顿大学计算机科学与技术专业硕士项目拒信
  3. sas sql中有类似mysql的 g_SAS中的SQL
  4. QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
  5. tfhpple解析html中的图片,图文详解使用TFHpple解析html方法
  6. windows10怎么锁定计算机,别让Windows 10锁住亲友
  7. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存
  8. html 中rem是什么单位,了解并使用CSS中的rem单位
  9. 静态链表(简单介绍)
  10. 学习云计算就业方向有哪些 一般薪资能拿多少
  11. 走格子(bfs+dji)
  12. 冰箱味道很臭?那你真的该学学这些除臭妙招
  13. Jenkins发版常见问题:ERROR: Exception when publishing, exception message [Failure]
  14. Log4j2写日志的艺术
  15. 高德地图的点聚合效果下的点的添加和删除
  16. nginx日志统计分析
  17. java解决小问题:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?(提示:使用while循环)
  18. 跌跌撞撞尝试Scrapy+Selenium+MySQL爬取与存储东方财富网股票数据
  19. Android All flavors must now belong to a named flavor dimension
  20. 教师资格证网站内部服务器错误,教师资格证报名入口_教师资格证ntce_教师资格证报名入口进不去咋办?...

热门文章

  1. linux 文件系统自动安装ko,Linux文件系统安装模块化讲解
  2. php mysql虚拟主机_关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
  3. 下载和阅读Android源码
  4. 西安创新港信息科技有限公司简介
  5. canvas 视频音乐播放器
  6. Java IO流 - FileInputStream
  7. MYSQLServer2008R2详细的图文安装教程
  8. Acro Multi-Language Class-Method for Devexpress VCL
  9. lol1月24服务器维护,LOL1月24日更新内容介绍 全新9.2版本上线
  10. 华为云官网性能优化实践