Dataproc作业配置优先级问题:动态分配与固定资源谁优先?
Spark动态分配与固定资源配置的优先级说明
你提供的Spark配置如下:
.config("spark.dynamicAllocation.enabled", "true") .config("spark.executor.memory", "12gb") .config("spark.executor.cores", "4") .config("spark.executor.instances", "3") .config("spark.driver.memory", "12g") .config("spark.driver.cores", 4) .config("spark.driver.maxResultSize", 0)
针对该配置的生效逻辑及优先级,说明如下:
动态分配会正常启用,但它与你指定的资源配置作用于不同维度,并非完全覆盖:
- 当
spark.dynamicAllocation.enabled=true时,spark.executor.instances=3会作为作业启动时的初始executor数量,后续Spark会根据作业的实时负载自动调整executor的数量(增加或减少),不再固定为3个; spark.executor.memory=12gb和spark.executor.cores=4是单个executor的资源规格,动态分配仅调整executor的数量,每个executor的内存和核数始终遵循你设定的值,不会被动态修改;- driver相关的所有配置(内存、核数、最大结果集大小)完全独立于executor动态分配逻辑,始终按你指定的参数生效。
- 当
优先级关系:
- 动态分配逻辑优先控制executor的数量(替代固定实例数的静态设置,但保留其作为初始值);
- 单个executor的资源规格(内存、核数)以及driver的所有配置,优先级高于动态分配逻辑,始终以你明确指定的参数为准。
内容的提问来源于stack exchange,提问作者Tom J Muthirenthi
相关产品推荐
相关产品推荐

