gpt4 book ai didi

apache-spark - 使用 spark.sql.autoBroadcastJoinThreshold 时,Spark Driver 不释放内存

转载 作者:行者123 更新时间:2023-12-05 07:37:11 24 4
gpt4 key购买 nike

我遇到过异常行为,

我有一个查询(内部循环),其中我有超过 5 个表的内部联接,一个大约 200MB,所有其他表都在 10MB 以下(所有都在循环开始时保留,在循环结束时不保留)。

每当我使用 spark.sql.autoBroadcastJoinThreshold(默认尝试过,5MB、1MB 和 100KB)时,在多次运行相同的查询后,它会继续添加驱动程序内存并最终因内存不足而失败(WARN TaskMemoryManager: Failed to allocate a页(16777216 字节),请重试。)

但是,如果我用 spark.sql.autoBroadcastJoinThreshold=-1 尝试同样的事情,它可以正常工作,没有任何问题。

我的 Spark(2.0.0) 配置是:

驱动内存:10g执行器内存:20g核心数:3节点:5

( 我想我提供的资源比需要的多,但即使我将执行程序内存减少到 4g,它也不起作用。无论内存配置如何,它都会处理相同的次数。)

PS:我没有手动创建任何广播变量。
我是 Spark 的新手。

最佳答案

查看堆栈跟踪,似乎正在广播的数据集大小约为 16MB,因此您可能需要将广播阈值的值设置为高于 16MB 以查看它是否有效。

您提到的另一个选项是禁用广播,但您需要检查 SQL 的性能以查看是否有任何不利影响。

关于apache-spark - 使用 spark.sql.autoBroadcastJoinThreshold 时,Spark Driver 不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com