pyspark dynamicAllocation和executorAllocationRatio的角色

wljmcqd8  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(87)

我正在尝试理解executorAllocationRatio的作用。如果我们为集群上运行的作业设置了以下spark配置,

"spark.dynamicAllocation.enabled": "true", 
"spark.dynamicAllocation.executorAllocationRatio": "0.4"
"spark.executor.cores": "5"
"spark.dynamicAllocation.minExecutors": "6"
"spark.dynamicAllocation.maxExecutors": "30"
"spark.executor.instances": "30"

具有上述缺陷的行为:

  • 开始时分配给作业的执行程序和核心的最小数量是多少?是6个执行程序,5个核心/执行程序(即总共6*5=30个核心)还是执行程序分配比率有任何作用?
  • 当我们启用dynamicAllocation时,它会影响内核吗?也就是说,最小核心/执行器是5个,还是核心/执行器也可以低于5个?
z6psavjg

z6psavjg1#

在无约束集群上,第一部分的答案(“开始时分配给作业的执行器和核心的最小数量是多少?“)将是30个执行程序,每个执行程序5个核心= 150个核心。executorAllocationRatio不会影响这个数字。但是,如果资源稀缺,您可能会看到您的应用程序在整个初始需求得到满足之前就开始调度,基于Spark配置-调度部分中所述的spark.scheduler.maxRegisteredResourcesWaitingTimespark.scheduler.minRegisteredResourcesRatio设置。
你的问题的第二部分很简单-- 5既不是最小值也不是最大值,它是分配给每个执行器的核心的确切数量。
spark.dynamicAllocation.executorAllocationRatio=1(默认)意味着Spark将尝试分配P executors = 1.0 * N tasks / T cores来处理N个挂起的任务。比率X小于1.0将使请求的执行器数量减少X。此设置不影响或考虑运行时资源可用性。另一种看待它的方式是,默认情况下,Spark会为每个停留在队列中的等待任务请求新的executor,持续时间为spark.dynamicAllocation.schedulerBacklogTimeoutspark.dynamicAllocation.sustainedSchedulerBacklogTimeout。比率X < 1将允许它为每个1/X任务请求新的执行器。

相关问题