Spark GC 调优

我们的Spark环境目前主要问题是数据量大后一些task的GC Time 特别长,多则几分钟,少则几十秒,实在不能忍受。参考databricks的Tuning Java Garbage Collection for Spark Applications对我们的环境优化后,效果比较明显。

选择垃圾收集器

如果分配给单个Executor的Heap足够大(我认为超过32G)时使用G1,否则使用Parallel。因为如果在Heap小于32G时使用G1,G1 region size默认小于16M,可能引发Humongous对象分配问题。
当然,使用G1可能也可能引起Executor异常退出,这时有两种解决方法:
1. 减少cores数量(就是减少当前Executor并行task的数量)
2. 增加老年代内存

测试验证

硬件环境:(64G+8cores+42T) * 4,用yarn管理,利用Spark SQL对124G,169个字段的数据用row_number函数除重,除重前1.6亿条,除重后1.5亿条:

executor-memory executor-cores extraJavaOptions Max GC Time Job Duration
20g
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行Spark参数调优时,我们可以考虑以下几个主要参数: 1. num-executors:该参数用于设置Executor的数量。在Spark 1.6之前,它还用于设置RDD持久化数据在Executor内存中所占的比例,默认为0.6。可以根据作业中需要持久化的RDD数量来调整该参数值。如果作业中有较多的RDD需要进行持久化操作,可以将该参数值调高;如果作业中只有少量的RDD需要进行持久化操作,可以将该参数值调低。\[2\] 2. Spark.Shuffle.memoryFraction:该参数用于设置Driver进程的内存。通常情况下,我们不需要显式地设置该参数,因为Driver运行内存的默认值为512MB。但是,当使用collect算子时,需要确保Driver内存足够大,以避免出现内存溢出的错误。一般建议将Driver内存设置为1G~4G。\[3\] 3. Spark.default.parallelism:该参数用于设置默认的并行度。并行度决定了作业中任务的并发执行程度。默认情况下,Spark会根据集群的总核数来自动设置并行度。但是,如果需要手动设置并行度,可以调整该参数的值。一般建议将并行度设置为集群的总核数的2~3倍。\[1\] 通过调整这些参数,我们可以优化资源使用率,提升Spark作业的执行性能。请根据实际情况和需求进行参数调优。 #### 引用[.reference_title] - *1* *2* *3* [Spark性能调优](https://blog.csdn.net/aikeaidecxy/article/details/126491521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值