累加器使用不当,导致spark driver内存溢出问题

本文讲述了因使用AccumulatorV2不当导致的Spark Driver内存溢出问题。在大数据平台处理大量数据时,自定义的累加器引发了driver端的OOM。通过分析dump文件,发现每个taskInfo对象平均占用4.67MB内存,主要由于AccumulableInfo列表。解决办法是避免使用带name参数的`register`方法,改用无名参数的方法来注册累加器。
摘要由CSDN通过智能技术生成

问题说明

  最近借助自定义spark累加器的方式去监控我司大数据平台处理接入的数据量(自定义累加器定义可以参考方法,可以参考AccumulatorV2.scala),但是最近项目局点同事反馈,文件数很多的情况下,spark driver端会出现OOM。(现场driver内存配置了80G)

问题定位过程

  因为现场dump文件达到80+G,因此,不能把dump文件完整的拿到办公机器来分析,只能借助linux memory analyzer tool工具去分析dump文件,得到一个分析结果(leak_suspects)。memory analyzer tool分析结果如下图所示:
在这里插入图片描述
根据图中的retained heap size,及number of objects信息,可以计算出平均一个taskInfo对象占了4.67M内存。

  查看spark taskinfo部分源代码

class TaskInfo(
    val taskId: Long,
    /**
     * The index of this task within its task set. Not necessarily the same as the ID of the RDD
     * partition that the task is computing.
     */
    val index: Int,
    val attemptNumber: Int,
    val launchTime: Long,
    val ex
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值