聊聊spark优化那点事

1、序列化
spark优化第一件事,选择序列化方式。对大对象的序列化和序列化速度慢都会影响spark程序的计算速度。spark提供两个序列化库:
第一:Java序列化(默认),Spark使用Java ObjectOutputStream框架序列化对象,并且可以与您创建的任何实现的类一起使用 java.io.Serializable。您还可以通过扩展来更紧密地控制序列化的性能 java.io.Externalizable。Java序列化是灵活的,但通常很慢,并导致许多类的大型序列化格式。
第二:Kryo序列化,Spark还可以使用Kryo库(版本2)更快地序列化对象。Kryo比Java序列化(通常高达10倍)明显更快,更紧凑,但不支持所有 Serializable类型,并且需要您提前注册您将在程序中使用的类以获得最佳性能。通过sparkConf初始化 conf.set(“spark.serializer”,”org.apache.spark.serializer.KryoSerializer”)来使用

2、内存管理
spark内存分为执行内存和存储内存。执行内存指用于shuffles, joins, sorts and aggregations中进行计算的内存;存储内存指用于缓存和传播的内存。执行和存储使用同一块内存。如果执行不占内存,存储将获取所有内存,反之,执行将驱赶存储,但不会超过阈值(R)

spark.memory.fraction设置JVM heap space - 300MB的一小部分(default 0.6).,其他0.4保存数据结构
spark.memory.storageFraction 设置存储内存的阈值(R)
spark.memory.fraction的值应该调整适应于堆空间大小
3、内存消耗
确定数据集所占内存的方法将RDD缓存起来,在webUI界面Storage页面看RDD占用内存。对于特定对象的内存消耗,可以根据使用SizeEstimator的estimate。
4、spark GC 调整
Spark中GC调整的目标是确保只有长寿命的RDD存储在Old代中,并且Young代的大小足以存储短期对象。这将有助于避免完整的GC收集在任务执行期间创建的临时对象。可能有用的一些步骤是:

  1. 通过收集GC统计信息来检查是否有太多垃圾收集。如果在任务完成之前多次调用完整的GC(full GC),则意味着没有足够的内存可用于执行任务
  2. 如果有太多次要集合但没有很多主要的GC,那么为Eden分配更多内存将会有所帮助。您可以将Eden的大小设置为高估每个任务所需的内存量。如果确定Eden的大小E,则可以使用该选项设置Young代的大小-Xmn=4/3*E。(按比例增加4/3也是为了解释幸存者地区使用的空间。)
  3. 在打印的GC统计信息中,如果OldGen接近满,则通过降低来减少用于缓存的内存量spark.memory.fraction; 缓存更少的对象比减慢任务执行速度更好。或者,考虑减小Young代的尺寸。-Xmn如果您按上述设置,这意味着降低。如果没有,请尝试更改JVM NewRatio参数的值。许多JVM将此默认为2,这意味着旧一代占据堆的2/3。它应该足够大,使得该分数超过spark.memory.fraction
  4. 尝试使用G1GC垃圾收集器-XX:+UseG1GC。在垃圾收集成为瓶颈的某些情况下,它可以提高性能。请注意,大执行人堆大小,可能重要的是增加了G1区域大小 与-XX:G1HeapRegionSize
  5. 如果您的任务是从HDFS读取数据,则可以使用从HDFS读取的数据块的大小来估计任务使用的内存量。请注意,解压缩块的大小通常是块大小的2或3倍。因此,如果我们希望有3或4个任务的工作空间,并且HDFS块大小为128 MB,我们可以估计Eden的大小4*3*128MB
  6. 可以通过设置spark.executor.extraJavaOptions作业的配置来指定执行程序的GC调整标志

5、提高spark并行度
6、广播大变量
7、减少内部的使用情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值