有没有办法在 Spark on YARN (Dataproc) 中指定所有三个资源属性(执行程序实例、内核和内存)

Is there a way to specify all three resource properties (executor instances, cores and memory) in Spark on YARN (Dataproc)

我正在尝试设置一个小型 Dataproc Spark 集群,其中包含 3 个工作人员(2 个常规工作人员和一个可抢占的工作人员),但我 运行 遇到了问题。

具体来说,我一直在努力寻找一种方法,让 Spark 应用程序提交者可以自由指定执行程序的数量,同时能够指定应分配给它们的内核数

Yarn 和 Spark 的 Dataproc 映像具有以下默认值:

使用这些默认值,不考虑内核数量(container-vcores 比率始终为 1:1),因为 DefaultResourceCalculator 只关心内存。在任何情况下,当以这种方式配置时,执行者的数量都会受到重视(通过将 spark.dynamicAllocation.enabled = falsespark.executor.instances = <num> 设置为 gcloud submit 中的属性)

所以我将其更改为 DominantResourceCalculator,现在它负责处理请求的内核,但我无法再指定执行程序的数量,无论是否禁用 Spark 动态分配。

了解默认 YARN 队列被配置限制为容量的 70%(容量-scheduler.xml)并且还配置了另一个非默认队列(但还没有使用)。我的理解是,只要 max capacity 保持在 100,Capacity 和 Fair 调度程序都不会在无竞争作业提交的情况下限制资源分配。无论如何,为了清楚,这些是集群创建期间的属性设置:

capacity-scheduler:yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
capacity-scheduler:yarn.scheduler.capacity.root.queues=default,online
capacity-scheduler:yarn.scheduler.capacity.root.default.capacity=30
capacity-scheduler:yarn.scheduler.capacity.root.online.capacity=70
capacity-scheduler:yarn.scheduler.capacity.root.online.user-limit-factor=1
capacity-scheduler:yarn.scheduler.capacity.root.online.maximum-capacity=100
capacity-scheduler:yarn.scheduler.capacity.root.online.state=RUNNING
capacity-scheduler:yarn.scheduler.capacity.root.online.acl_submit_applications=*
capacity-scheduler:yarn.scheduler.capacity.root.online.acl_administer_queue=*

作业提交是通过gcloud工具完成的,使用的队列是默认的。

例如,在执行gcloud dataproc submit时设置如下属性:

--properties spark.dynamicAllocation.enabled=false,spark.executor.memory=5g,spark.executor.instances=3

完成以下任务:

有没有办法配置 YARN 使其同时接受两者?

已编辑以指定队列设置

您可以尝试为 yarn.scheduler.capacity.root.online.user-limit-factor 设置一个更高的值,例如 2 来代替您设置的当前值 1。此设置使用户能够利用两倍的所选容量。您将 100% 设置为最大容量允许将所选容量加倍。