Spark提供一种基于负载使用情况来动态调整application资源的机制。
动态分配开启后,spark application在有pending tasks等待调度时会请求新的executors。
移除主要是判断executor的空闲时间。
shuffle过程中,executor会将map阶段的输出写入到本地,并且在其他executor需要获取文件时充当文件服务器的角色。 当某些tasks运行的时间格外的长,动态分配机制可能会在shuffle完成之前移除该executor,在这种情况下会导致进行不必要的重计算。
Property Name | Default | Meaning | Since Version |
---|---|---|---|
spark.dynamicAllocation.enabled | false | 是否启动动态资源分配。需要以下条件之一:1) 启动external shuffle service。参数为spark.shuffle.service.enabled。2) 启用shuffle tracking。spark.dynamicAllocation.shuffleTracking.enabled。 3) 启用优雅退役。spark.decommission.enabled和spark.storage.decommission.shuffleBlocks.enabled | 1.2.0 |
spark.dynamicAllocation.executorIdleTimeout | 60s | 动态资源分配启用时,空闲超过该时间的executor将会被移除 | 1.2.0 |
spark.dynamicAllocation.cachedExecutorIdleTimeout | infinity | 动态资源分配启用时,空闲超过该时间的缓存数据块的executor将会被移除 | 1.4.0 |
spark.dynamicAllocation.schedulerBacklogTimeout | 1s | 积压的task持续超过该时间,将会请求新的executor | 1.2.0 |
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout | schedulerBacklogTimeout | 效果与spark.dynamicAllocation.schedulerBacklogTimeout,但仅用于后续的executor的请求 | 1.2.0 |
spark.dynamicAllocation.initialExecutors | spark.dynamicAllocation.minExecutors | 动态资源分配启用时,executor的初始化值。如果设置了–num-executors或spark.executor.instances,并且大于该值,将会用于初始化的executor数量 | 1.3.0 |
spark.dynamicAllocation.maxExecutors | infinity | executor的数量上限 | 1.2.0 |
spark.dynamicAllocation.minExecutors | 0 | executor数量下限 | 1.2.0 |
spark.dynamicAllocation.executorAllocationRatio | 默认情况下,动态分配会根据要处理的任务数量请求足够的执行器来最大限度地提高并行性。但在某些小任务情况下,可能会导致大量资源浪费。此设置允许设置一个比率,该比率将用于减少相对于最大并行度的executor数量。默认为1.0以提供最大并行度。0.5将executor的目标数量除以2。dynamicAllocation计算的executor目标数量仍然可以被spark.dynamicAllocation.minExecutitors和spark.dynamicAllocation.maxExecutitors设置覆盖 | 2.4.0 | |
spark.dynamicAllocation.shuffleTracking.enabled | true | 对executor启用shuffle文件跟踪,从而无须使用external shuffle service。该选项尝试使active的作业中,存储shuffle数据的executor存活 | 3.0.0 |
spark.dynamicAllocation.shuffleTracking.timeout | infinity | 启用shuffle tracking时,控制存储shuffle数据的executor的超时时间。默认值为无穷,即spark将依赖垃圾收集来释放shuffle的executor | 3.0.0 |