1

我有一个使用 、 和 运行的构建DRIVER_MEMORY_LARGENUM_EXECUTORS_64为什么EXECUTOR_CORES_LARGE这没有足够的资源来防止我的工作由于OOM导致的 executor 丢失而失败?

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

4

1 回答 1

1

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

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

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

您还可以在执行程序中获得标准数量的内存,并且在您开始工作时该内存是固定的。因此,当您更改核心数量时,您的内存不会扩大,除非您通过配置文件特别请求它EXECUTOR_MEMORY_LARGE

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

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

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

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

干杯

于 2021-11-17T14:21:34.853 回答