为什么我的带有执行器核心的构建指定了 OOM?

Why does my build with executor cores specified OOM?

我有一个构建 运行 DRIVER_MEMORY_LARGENUM_EXECUTORS_64EXECUTOR_CORES_LARGE,为什么这没有足够的资源来防止我的工作因执行程序丢失而失败到 ?

我知道我的工作中有一些大任务,但奇怪的是这些资源不足以成功。

了解作业的资源分配很重要,不仅要了解执行者级别,还要了解 任务 级别。

作为复习,许多任务可以 运行 在你的执行器中,通常一个任务在执行器中获得一个核心来完成它的工作。这可以调整,但对于大多数作业来说是不可取的。

在典型的设置中,执行者有两个核心来完成他们的工作。因此,它可以 运行 每个执行者执行两个任务。

您还可以在执行程序中获得标准数量的内存,并且此内存在您开始工作时是固定的。因此,除非您通过 EXECUTOR_MEMORY_LARGE

这样的配置文件明确请求,否则当您更改核心数时,您的内存不会增加

因此,在正常情况下,您的任务会获得 M / C 字节到 运行,其中 M 是执行程序中的 GB 内存,C 是执行程序中的核心数。

当你增加 C 时,你会减少每个任务的内存量,这会增加 OOM 的风险。

因此,去掉你对内核数量的提升,你的工作更有可能成功。

在大多数情况下,您不想修改执行程序中的核心数量,只需要修改分配给每个执行程序的内存和执行程序的总体数量。这两个选项使您能够调整基础设施的大小以成功完成大型任务(执行程序内存提升)和 运行 足够快以满足您的计划要求(执行程序计数)。

干杯