INFO-平台任务调度依赖说明
更新时间: 2024-12-04 15:40:16
适用模块
离线开发
一、任务依赖说明
猛犸平台提交调度任务时可选择节点依赖与任务依赖,其中节点与任务均为针对本工作流而言:
跨集群依赖开关mammut.taskCrossProductGroup.enable=true
1、跨周期自依赖:
关闭表示跨流不依赖上一周期,即各周期相互独立;
开启后当前任务执行必须依赖此任务的上一周期实例,此时只能有一个实例在运行状态,就绪或运行中
补数据配置并发时关闭自依赖,否则并发不生效
2、任务依赖:
任务依赖用于配置当前工作流整体依赖其他工作流中节点,此时本工作流在到达计划执行时间后,所有节点均需等待依赖节点成功后,才开始按照工作流节点顺序开始任务执行;
如下任务B运行前提是任务A的A1节点已成功完成
3、节点依赖:
节点依赖用于配置当前工作流中指定节点依赖其他工作流中节点,此时本工作流中其他未配置依赖节点将按照任务计划执行时间开始执行;
如下任务B的B1节点运行前提是A2成功完成,B的其他节点不受任务A上节点状态影响
4、跨流依赖
假设我们设计了一个工作流FA,其依赖关系为:
A—>B—>C,即A运行完成后,运行B,最后运行C。
假设我们设计了另一个工作流FB,其依赖关系为:
A1—>B1—>C1。
以上节点之间的依赖为工作流内部依赖。如果我们希望FB等待FA的某个节点运行完成后,再开始执行,就需要设置跨流依赖,此时我们会遇到两个flow调度时间与周期不同的问题。举例来说:
假如FA的调度是每天凌晨2点开始执行,FB设置的是每天早上1:30点开始执行,FB跨流依赖了FA的B节点,那么默认情况下FB会依赖FA工作流前一天实例,如果FA前一天的实例已经执行结束,FB就会正常调度。
猛犸提供以下方式方便用户进行依赖具体实例的设置:
a. offset,在设置跨流依赖的时候,用户可以指定offset值,用户可以理解为跨流依赖时,FB开始调度,然后会去寻找离FA最近的一次实例状态,这个一次即为offset值,此时offset=0,如果offset=1,则会找离FB第二近的那次FA的实例。
b. 同周期依赖,如果FA和FB都是天调度,且用户勾选了同周期依赖,那么FB无论是几点开始调度,都将依赖FA今天的实例完成。
(注跨流依赖设置是否正确,建议通过执行计划查看依赖信息确认,避免调度后由于依赖不符合要求,导致数据异常)
5、同周期依赖
当前任务配置的调度设置类型为“常规设置”,且调度周期为1天时,会显示该开关。开启开关,且满足以下条件时,可实现让当前任务当天的实例依赖上游1天调度任务当天的实例(设置offset时可实现跨天依赖):
1)当前任务如果配置了调度日历,则依赖的上游1天调度任务也需要引用相同的调度日历、配置相同的日历生效模式;
2)依赖的上游任务,调度设置类型为“常规设置”,且调度周期为1天。
举例:A任务计划每天4点执行, B任务计划每天3点执行, B任务的实例默认是依赖A任务前一天4点的实例,如果打开此处的开关,则B任务的实例依赖A任务当日4点的实例,即A任务的4点实例执行成功后,B任务的3点实例才会开始执行。
注:同周期仅支持常规天调度,crontab设置的天调度无法正常按照同周期进行依赖,默认取最近一次调度实例。
二、依赖问题排查示例
1、节点就绪/超时终止
分别有任务A\B\C各有各有3个节点(含虚拟节点),其中A1、B1节点会失败,A2、B2会成功,任务C配置任务依赖A2节点,配置C2节点依赖B1节点
由于A2成功,故任务C会运行,又因为C2依赖B1,故C2就绪中(注:节点超时终止参数为ready.job.expire.time,在az executor配置中可查看,一般默认时间1天,就绪超过1天,节点将被终止失败,进而导致任务失败)
2、任务就绪/超时终止
分别有任务A\B\C各有各有3个节点(含虚拟节点),其中A1、B1节点会失败,A2、B2会成功,任务C配置任务依赖A1节点,配置C1节点依赖B2节点,
虽然B2成功,但由于A1失败,因此整个任务C将就绪(任务就绪超时参数为ready.flow.expire.time,在az web配置可查看,一般默认2天,就绪超过2天任务任务将被终止失败)
3、实例未生成
实例未生成主要有:
a、未到调度执行时间;
b、配置了加速器,优先执行其他任务,详细说明可查看任务运维页面
c、上游实例未生成
如:任务A 12:00调度,任务B 11:30调度,任务B配置同周期依赖任务A,此时在11:30~12:00之间,任务B实例状态一直是未生成(实例未生成一般均为上游未生成,依次查看依赖即可)
作者:林帅