我正在尝试设置一个由3名工作人员组成的小型Dataproc Spark群集(2个常规和1个可抢占),但我遇到了问题。
具体来说,我一直在努力寻找一种方法让Spark应用程序提交者可以自由指定执行者的数量,同时能够指定应该为其分配多少个核心
Yarn和Spark的Dataproc图像具有以下默认值:
DefaultResourceCalculator
使用这些默认值时,不考虑核心数(容器-vcores的比率始终为1:1),因为DefaultResourceCalculator
只关心内存。在任何情况下,当以这种方式配置时,执行者的数量得到尊重(通过在gcloud提交中将spark.dynamicAllocation.enabled = false
和spark.executor.instances = <num>
设置为属性)
因此我将其更改为DominantResourceCalculator
,现在它会处理所请求的内核,但无论是否禁用Spark动态分配,我都无法再指定执行程序的数量。
通过配置(在capacity-scheduler.xml中)默认YARN队列限制为容量的70%并且还配置了另一个非默认队列(但尚未使用),这可能也是有意义的。 。我的理解是,只要最大容量保持在100,容量和公平调度程序就不会限制在无约束作业提交的情况下的资源分配。无论如何,为了清楚起见,这些是群集创建期间的属性设置:
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以便它同时接受?
已编辑以指定队列设置
答案 0 :(得分:1)
您可以尝试为yarn.scheduler.capacity.root.online.user-limit-factor设置更高的值,例如2,以代替您设置的值1的当前值。此设置使用户可以利用所选容量的两倍。您将100%设置为最大容量可以使所选容量增加一倍。