有没有办法在 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 映像具有以下默认值:
- Spark 动态分配已启用
- Yarn Capacity Scheduler 配置为
DefaultResourceCalculator
使用这些默认值,不考虑内核数量(container-vcores 比率始终为 1:1),因为 DefaultResourceCalculator
只关心内存。在任何情况下,当以这种方式配置时,执行者的数量都会受到重视(通过将 spark.dynamicAllocation.enabled = false
和 spark.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% 设置为最大容量允许将所选容量加倍。
我正在尝试设置一个小型 Dataproc Spark 集群,其中包含 3 个工作人员(2 个常规工作人员和一个可抢占的工作人员),但我 运行 遇到了问题。
具体来说,我一直在努力寻找一种方法,让 Spark 应用程序提交者可以自由指定执行程序的数量,同时能够指定应分配给它们的内核数
Yarn 和 Spark 的 Dataproc 映像具有以下默认值:
- Spark 动态分配已启用
- Yarn Capacity Scheduler 配置为
DefaultResourceCalculator
使用这些默认值,不考虑内核数量(container-vcores 比率始终为 1:1),因为 DefaultResourceCalculator
只关心内存。在任何情况下,当以这种方式配置时,执行者的数量都会受到重视(通过将 spark.dynamicAllocation.enabled = false
和 spark.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% 设置为最大容量允许将所选容量加倍。