抢占任务
操作场景
抢占任务可精简队列中的job运行并提高资源利用率,由ResourceManager的capacity scheduler实现,其简易流程如下:
- 假设存在两个队列A和B。其中队列A的capacity为25%,队列B的capacity为75%。
- 初始状态下,任务1发送给队列A,此任务需要75%的集群资源。之后任务2发送到了队列B,此任务需要50%的集群资源。
- 任务1将会使用队列A提供的25%的集群资源,并从队列B获取的50%的集群资源。队列B保留25%的集群资源。
- 启用抢占任务特性,则任务1使用的资源将会被抢占。队列B会从队列A中获取25%的集群资源以满足任务2的执行。
- 当任务2完成后,集群中存在足够的资源时,任务1将重新开始执行。
操作步骤
参数入口:
参考修改集群服务配置参数进入Yarn服务参数“全部配置”界面,在搜索框中输入参数名称。
参数 |
描述 |
默认值 |
---|---|---|
yarn.resourcemanager.scheduler.monitor.enable |
根据“yarn.resourcemanager.scheduler.monitor.policies”中的策略,启用新的scheduler监控。设置为“true”表示启用监控,并根据scheduler的信息,启动抢占的功能。设置为“false”表示不启用。 |
false |
yarn.resourcemanager.scheduler.monitor.policies |
设置与scheduler配合的“SchedulingEditPolicy”的类的清单。 |
org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy |
yarn.resourcemanager.monitor.capacity.preemption.observe_only |
|
false |
yarn.resourcemanager.monitor.capacity.preemption.monitoring_interval |
根据策略监控的时间间隔,单位为毫秒。如果将该参数设置为更大的值,容量检测将不那么频繁地运行。 |
3000 |
yarn.resourcemanager.monitor.capacity.preemption.max_wait_before_kill |
应用发送抢占需求到停止container(释放资源)的时间间隔,单位为毫秒。取值范围大于等于0。 默认情况下,若ApplicationMaster15秒内没有终止container,ResourceManager等待15秒后会强制终止。 |
15000 |
yarn.resourcemanager.monitor.capacity.preemption.total_preemption_per_round |
在一个周期内能够抢占资源的最大的比例。可使用这个值来限制从集群回收容器的速度。计算出了期望的总抢占值之后,策略会伸缩回这个限制。 |
0.1 |
yarn.resourcemanager.monitor.capacity.preemption.max_ignored_over_capacity |
集群中资源总量乘以此配置项的值加上某个队列(例如队列A)原有的资源量为资源抢占盲区。当队列A中的任务实际使用的资源超过该抢占盲区时,超过部分的资源将会被抢占。取值范围:0~1。
说明:
设置的值越小越有利于资源抢占。 |
0 |
yarn.resourcemanager.monitor.capacity.preemption.natural_termination_factor |
设置抢占目标,Container只会抢占所配置比例的资源。 示例,如果设置为0.5,则在5*“yarn.resourcemanager.monitor.capacity.preemption.max_wait_before_kill”的时间内,任务会回收所抢占资源的近95%。即接连抢占5次,每次抢占待抢占资源的0.5,呈几何收敛,每次的时间间隔为“yarn.resourcemanager.monitor.capacity.preemption.max_wait_before_kill”。取值范围:0~1。 |
1 |