Databricks Spark:java.lang.OutOfMemoryError:GC 开销超出限制 i

问题描述 投票:0回答:4

我正在 Databricks 集群中执行 Spark 作业。我通过 Azure 数据工厂管道触发该作业,它以 15 分钟的间隔执行,因此在

successful execution of three or four times
之后,它会失败并抛出异常
"java.lang.OutOfMemoryError: GC overhead limit exceeded"
。 虽然上述问题有很多答案,但在大多数情况下,他们的作业没有运行,但在我的情况下,在成功执行一些先前的作业后,它会失败。 我的数据大小仅不到 20 MB。

我的集群配置是:

所以我的问题是我应该在服务器配置中进行哪些更改。如果问题出在我的代码上,那么为什么它大多数时候都能成功。请给我建议并提出解决方案。

apache-spark databricks azure-databricks
4个回答
0
投票

这很可能与执行程序内存有点低有关。不确定当前设置是什么,以及它的默认值是什么,在这个特定的databrics分布中的默认值是什么。即使它通过了,但由于内存不足,会发生大量GC,因此它偶尔会失败。在spark配置下,请提供spark.executor.memory以及与执行器数量和每个执行器核心数相关的一些其他参数。在spark-submit中,配置将作为spark-submit --conf spark.executor.memory=1g

提供

0
投票

您可以尝试增加驱动节点的内存。


0
投票

有时垃圾收集器不会释放驱动程序内存中所有已加载的对象。

您可以尝试强制 GC 这样做。您可以通过执行以下命令来做到这一点:

spark.catalog.clearCache()
for (id, rdd) in spark.sparkContext._jsc.getPersistentRDDs().items():
    rdd.unpersist()
    print("Unpersisted {} rdd".format(id))

0
投票

你能解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.