一次关于Spark广播变量broadcast variable的优化

文章讨论了由于广播变量设置不当在Spark应用中导致的ETLjobs异常,包括内存不足和ExecutorOOM问题。根本原因是`spark.sql.autoBroadcastJoinThreshold`参数与集群规模不匹配。建议包括调整广播阈值、检查Executor资源配置和优化其他相关参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何通过配置广播变量broadcast variable去优化Spark application

今天,想和大家分享一个我在公司工作中遇到的有趣的Spark-sql问题:由广播变量引起的大量ETL jobs异常。上周,突然好几个同事反应有大批量的etl jobs由于广播连接timeout和Spark executor JVM OOM的异常从而导致spark application执行失败,导致一部分下游数据报表的delay。

# WARN MemoryStore: Not enough space to cache broadcast_6 in memory! (computed 4.9 GiB so far)
23/02/23 09:20:55 WARN BlockManager: Persisting block broadcast_6 to disk instead.
# java.lang.OutOfMemoryError: Java heap space

在本文中,我将深入探讨这些问题的原因,并提供一些优化建议,可以更好地利用集群资源。

直接原因:EMR集群规模缩小

由于公司内部架构调整,我们的ETL job需要从AWS的spark-sql on EMR迁移到Spark-sql on EKS。随着迁移工作的进行,EMR集群的规模从稳定的40个节点减少到了大约22个节点。此外,我们团队最近

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值