当前离线开发任务支持基于优先级进行调度,SQL节点、Spark节点以及MR节点在线上调度时,支持将任务的优先级(由低到高L1-L6)转换为优先级数值(10、20、30、40、50、60)传递给Yarn队列来执行,高优先级任务优先获取Yarn资源。

说明:
1. 该功能基于NDH集群的CS调度的Yarn集群;
2. 优先级数值(10、20、30、40、50、60)是用来传递给yarn的参数,不涉及具体配置页面,仅做了解;
3. 对于Spark节点,Spark引擎版本需要3.0以上。

使用前提

该功能需要运维开启对应的Yarn集群的优先级调度功能。开启后,项目管理员、项目负责人可在项目中心注册Yarn队列或修改队列的时候通过“优先级调度”开关开启或关闭功能。
任务优先级调度 - 图1

功能说明

名词解释

任务优先级调度功能在使用过程中会涉及到以下四种概念:原始优先级、临时优先级、最终优先级、优先级传递。为了更好的了解功能,先对上述概念进行解释。

  • 原始优先级:离线开发提交任务调度的时候,支持设置任务的原始优先级。原始优先级包括L1、L2、L3、L4。此外,任务运维中心的任务列表,也支持设置任务原始优先级。
    任务优先级调度 - 图2

  • 临时优先级:在任务运维中心,支持对未生成的实例设置临时优先级(最高L6)。在生效时长内,会替代原始优先级参与最终优先级的生成,且设置后会在优先级下显示临时优先级剩余时长。
    任务优先级调度 - 图3
    此外,临时优先级支持批量设置,可在周期实例运维 - 未生成实例页面选定需要修改优先级的实例,点击批量设置临时优先级按钮进行设置。
    任务优先级调度 - 图4

  • 优先级传递:如果任务被下游任务依赖,且下游任务的最终优先级高于任务的最终优先级,则将下游任务的最终优先级作为该任务的最终优先级。优先级会基于任务依赖定时刷新,从下游向上游传递升级。比如任务A依赖任务B,A为L3(原始优先级),B为L1(原始优先级),则系统会将B升级到L3(最终优先级)。

  • 最终优先级:展示最终优先级的时候,有几种不同的展示形态。
    L1:表示实例的原始优先级和最终优先级都是L1,且没有调整过任务临时优先级;
    L4(L1):表示未调整过任务临时优先级,但实例被下游实例传导成更高优先级L4;
    L4(L1->L4):表示调整过任务临时优先级到L4,实例最终优先级为L4;
    L5(L1->L4):表示调整过任务临时优先级到L4,实例被下游实例传导为L5;
    L1(L4->L1):表示调整过任务临时优先级到L1,实例最终优先级为L1;
    L5(L4->L1):表示调整过任务临时优先级到L1,实例被下游实例传导为L5。
    需要注意的是:针对重跑场景设置的优先级,等同于设置任务临时优先级的效果,遵循上述规则。

优先级使用场景说明

  • 场景一:离线开发线上模式调度
    在离线开发线上模式的编辑调度页面支持优先级的设置。此时需要注意两种情况,如果当前选择的队列开启了优先级调度且未调整过任务临时优先级,那么此时的调度优先级将根据此处的设置进行;如果此时的队列未开启优先级调度,则此时优先级的配置将不会生效,只能以默认优先级L1进行。
    任务优先级调度 - 图5

  • 场景二:重跑
    重跑场景下,优先级的默认值将使用上一个实例的最终优先级,没有的情况下则用任务的临时优先级,如果没有任务的临时优先级则采用原始优先级。优先级支持配置,最终执行时以此处配置的优先级为准,如果未更改则使用默认值。
    任务优先级调度 - 图6

  • 场景三:批量重跑
    批量重跑场景下,默认使用上一个实例的最终优先级,没有则用任务的临时优先级,没有则用原始优先级。

其它场景暂不支持任务优先级调度设置。