为什么在配置 spark.yarn.executor.memoryOverhead 时 dataproc 不为每个工作人员创建两个执行程序?

Why does dataproc not create two executors per worker when spark.yarn.executor.memoryOverhead is configured?

Dataproc 应该适合每个 worker(或 yarn NodeManager)两个 Executor,每个 Executor 获得一半的内核和一半的内存。 它确实是这样工作的。

但是,如果我们覆盖设置,比如 spark.yarn.executor.memoryOverhead=4096

然后它只为每个工人创建一个执行器。集群的一半核心和内存未被利用。而且无论我们如何使用 spark.executor.memory 或 spark.executor.cores,它仍然无法启动足够多的执行程序来利用所有集群资源。

如何让 dataproc 仍然为每个 worker 创建 2 个执行程序?纱线开销从执行程序内存中扣除,所以它应该仍然能够容纳 2 个执行程序,不是吗?

在 YARN 中执行时,Spark 将请求内存大小为 spark.executor.memory + spark.yarn.executor.memoryOverhead 的容器。如果您要添加到 memoryOverhead,您需要从 spark.executor.memory 中减去等量以保持相同的容器包装特性。