在利用Spark处理数据时,如果数据量不大,那么Spark的默认配置基本就能满足实际的业务场景。但是当数据量大的时候,就需要做一定的参数配置调整和优化,以保证业务的安全、稳定的运行。并且在实际优化中,要考虑不同的场景,采取不同的优化策略。

1.合理设置微批处理时间

在SparkSreaming流式处理中,合理的设置微批处理时间(batchDuration)是非常有必要的。
如果batchDuration设置过短,会导致SparkStreaming频繁提交job。如果每个batchDuration所产生的job不能在这个时间内完成处理,就会造成job不断堆积,最终导致SparkStreaming发生阻塞,甚至程序宕掉。
需要根据不同的应用场景和硬件配置等确定,可以根据SparkStreaming的可视化监控界面,观察Total
Delay等指标来进行batchDuration的调整。

2.控制消费的最大速率

比如SparkStreaming和Kafka集成,采用direct模式时,需要设置参数spark.streaming.kafka.maxRatePerPartition以控制每个Kafka分区最大消费数。该参数默认没有上线,即Kafka当中有多少数据它就会直接全部拉出。
但在实际使用中,需要根据生产者写入Kafka的速率以及消费者本身处理数据的速度综合考虑。
同时还需要结合上面的batchDuration,使得每个partition拉取的数据,要在每个batchDuration期间顺利处理完毕,做到尽可能高的吞吐量,该参数的调整需参考可视化监控界面中的Input
Rate和Processing Time。

3.缓存反复使用的"数据集"

Spark中的RDD和SparkStreaming中的DStream,如果被反复的使用,最好利用cache或者persist算子,将"数据集"缓存起来,防止过度的调度资源造成的不必要的开销。

4.合理的设置GC

JVM垃圾回收是非常消耗性能和时间的,尤其是stop world、full gc非常影响程序的正常运行。
关于JVM和参数配置,建议研读《JVM内存管理和垃圾回收》、《JVM垃圾回收器、内存分配与回收策略》、《内存泄漏、内存溢出和堆外内存,JVM优化配置参数》。

5.合理设置CPU

每个executor可以占用一个或多个core,可以通过观察CPU的使用率变化来了解计算资源的使用情况。
要避免CPU的使用浪费,比如一个executor占用多个core,但是总的CPU利用率却不高。此时建议让每个executor占用相对之前较少的core,同时worker下面增加更多的executor进程来增加并行执行的executor数量,从而提高CPU利用率。同时要考虑内存消耗,毕竟一台机器运行的executor越多,每个executor的内存就越小,容易产生OOM。

6.使用Kryo进行序列化和反序列化

Spark默认使用Java的序列化机制,但这种Java原生的序列化机制性能却比Kryo差很多。使用Kryo需要进行设置:
//设置序列化器为KryoSerializerSparkConf.set
(“spark.serializer”,“org.apache.spark.serializer.KryoSerializer”)
//注册要序列化的自定义类型SparkConf.registerKryoClasses
(Array(classOf[CustomClass1],classOf[CustomClass2]))

7.使用高性能的算子

1)使用reduceByKey、aggregateByKey替代groupByKey
2)filter之后进行coalesce操作
3)使用repartitionAndSortWithinPartition 替代repartition与sort操作
4)使用mapPartition替代map 5)使用foreachPartition替代foreach

要结合实际使用场景,进行算子的替代优化。

除了上述常用调优策略,还有合理设置Spark并行度,比如参数spark.default.parallelism的设置等,所有这些都要求对Spark内核原理有深入理解,这里不再一一阐述。

Spark调优——你工作中的首选相关推荐

  1. rdd数据存内存 数据量_大数据开发-Spark调优常用手段

    Spark调优 spark调优常见手段,在生产中常常会遇到各种各样的问题,有事前原因,有事中原因,也有不规范原因,spark调优总结下来可以从下面几个点来调优. 1. 分配更多的资源 分配更多的资源: ...

  2. Spark学习之Spark调优与调试(7)

    Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...

  3. java jvm调优_(第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的 ...

  4. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  5. (第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候需要做我的智力进步! 感 ...

  6. (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的下一组博客和视频,印章 ...

  7. 跟我一起学【Spark】之——Spark调优与调试

    第8章 Spark调优与调试 1.总结Spark的配置机制 2.理解Spark应用性能表现的基础知识.设置相关配置项.编写高性能应用设计模式 3.探讨Spark的用户界面.执行的组成部分.日志机制 8 ...

  8. oracle正确使用索引,通过案例学调优之--Oracle中null使用索引

    通过案例学调优之--Oracle中null使用索引 默认情况下,Oracle数据库,null在Index上是不被存储的,当在索引列以"is null"的方式访问时,无法使用索引:本 ...

  9. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [Spark调优]大表join大表,少数key导致数据倾斜解决方案 参考文章: (1)[Spark调优]大表join大表,少数key导致数据倾斜解决方案 (2)https://www.cnblogs. ...

最新文章

  1. linux脚本做分数计算,shell脚本,计算学生分数的题目。
  2. Magento模块解析
  3. 关于C#函数对象参数传递的问题
  4. nginx php7 fastcgi,[Mac php7 nginx]解决nginx FastCGI sent in stderr: “Primary script unknown”
  5. html5做一个相册_HTML5最新版本介绍
  6. ASP.NET页面生命周期概述
  7. 关于连接参数-Ttext
  8. python通信系统仿真_Python与V-REP联合仿真
  9. qrc文件编译到可执行文件exe
  10. python开源代码题库管理_GitHub - gnu-xiaosong/Qu_system: 一款开源免费的题库系统程序,高效,安全,功能强大...
  11. 基于Qt的连连看小游戏
  12. Java课程设计题目七:魔板游戏
  13. 服务器能不能清理系统垃圾,在服务器上如何清理垃圾
  14. 【Chrome扩展程序】content_script 的跨域问题
  15. 轻松实现钉钉机器人定时发消息
  16. 初中计算机数学,初中数学
  17. php imap 安装_php7安装imap扩展
  18. 【windows 10】 Microsoft Store 安装软件闪退的解决办法
  19. 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
  20. java安卓怎么开发一个新闻app,一个基于Android系统的新闻客户端(一)

热门文章

  1. 使用分析函数进行行列转换
  2. 沟通CTBS助六和集团实现财务集中管理
  3. C:\Python27\python.exe: can't open file '2.py': [Errno 2] No such file or directory
  4. AtCoder - arc100_c Or Plus Max(SOSdp)
  5. 牛客 - Elo mountains(AC自动机+可持久化数组优化)
  6. HDU - 3333 Turing Tree(线段树+离线处理)
  7. mysql 预留一个自定义字段_mysql-预留字段
  8. osqa java_从LSM-Tree、COLA-Tree谈到StackOverflow、OSQA(召唤前端)
  9. nginx系列之四:web服务器
  10. 【Boost】boost库中thread多线程详解13——线程标识符