【问题标题】:Databricks Spark: java.lang.OutOfMemoryError: GC overhead limit exceeded iDatabricks Spark:java.lang.OutOfMemoryError:超过 GC 开销限制 i
【发布时间】:2020-02-26 15:05:20
【问题描述】:

我正在 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


【解决方案1】:

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

【讨论】:

  • 嘿@Shridhar 我正在寻找确切的解决方案,而不是通用的答案。
  • 解决方案是拥有 spark.executor.memory=1g 但抱歉,我不知道如何从您启动应用程序的方式中做到这一点。可能您可以在高级选项下提供的火花配置部分添加
【解决方案2】:

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

【讨论】:

  • 需要更多关于如何做的解释。
  • 在集群配置页面增加驱动节点的计算能力。例如。上面的快照显示 8 个内核和 16GB 内存 - 尝试选择具有更高内存的不同配置并查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多