当您希望节点发布到生产环境后能够按照配置立即生成调度实例自动执行时,可以将节点的实例生成方式配置为发布后即时生成。
背景信息
节点发布后,可在运维中心查看任务最新配置。DataWorks每晚会根据周期任务的节点配置,生成第二天周期性自动调度的周期实例。而节点新建和更新操作发布至生产环境当天,自动调度的周期实例何时生效,或依赖关系何时更新,与您选择的实例生成方式有关。
在DataWorks,您可以通过实例生成方式的两个选项:T+1次日生成、发布后即时生成,来控制是否立即生效。
-
T+1次日生成:节点新建和更新操作在第二天的周期实例上生效。如果节点发布到生产环境后,需要立即执行任务,可以针对该任务执行补数据操作。
-
发布后即时生成:节点新建和更新操作将及时生效,但发布节点的时间点与真正生成可运行实例之间存在时间差,这将对不同的任务运行场景产生不同影响,详情可参见常见即时生成实例场景说明。
注意事项
-
调度配置实例生成方式为立即生成时,若修改重跑属性,已经过期的实例重跑属性选项不生效。
-
工作流内的节点不支持单独配置发布后即时生成,仅支持在工作流编辑页面的调度配置中对整个工作流配置发布后即时生成。
-
无论在调度配置中选择T+1次日生成实例,还是发布后即时生成实例,每天22:00至24:00为全量生成次日周期调度实例的时间。在该时间段发布的任务均需等待至第三天才能生成相应实例。
-
上游任务实例生成方式不一致,可能导致孤立节点产生。
-
即时生成实例存在时间差:为避免实例变更导致任务运行异常,发布后即时生成实例存在10分钟的时间差,即定时调度时间需晚于发布时间点至少10分钟,任务才会按最新配置运行。
-
即时生成实例的作用范围(任务代码与调度配置的生效差异):并非所有变更都会随实例即时生效,需区分任务代码与调度配置两类变更,二者的生效逻辑不同。
-
任务代码(如SQL、Shell等脚本逻辑):实例在运行时读取的是任务当前最新的代码。因此当代码写错导致运行异常时,通常只需修正代码并重新发布上线,再重跑对应实例即可恢复,无需重新生成实例。
-
调度配置(如调度参数、重跑策略等):此类属性在实例生成时即固化到实例上。实例生成后再修改任务的调度配置,已生成的实例不会自动同步,仍会沿用生成时的旧配置运行。
例如:仅将调度参数由
${bizdate}改为${datehour}并发布,代码中对${datehour}的引用会立即生效,但已生成实例上固化的旧参数上下文不会刷新,二者不匹配时可能导致实例运行时参数解析失败。修改节点关联的数据源实例等场景同理,当天已生成的实例仍会采用变更前的配置执行。
若需让调度配置的变更作用到已生成的实例上,您可以:
-
在运维中心找到变更后的任务,通过刷新实例操作批量更新已生成实例的调度配置;
-
或对该任务执行补数据操作,补数据将根据任务最新配置生成实例并执行。
-
即时生成实例说明
发布后即时生成实例仅适用于未来时间段的定时调度。具体来说,只有在任务的调度时间晚于发布时间点时,实例才会正常执行
-
新建任务当天会生成周期实例,但只有定时调度时间在未来时间段的实例才会正常执行;
-
更新节点调度时间,定时调度时间在过去,则不会生成实例;如果定时调度时间在未来时间段,将按照新配置生成新实例,替换更新前实例。
说明定时调度时间必须在节点发布时间点的10分钟以后的未来时间,才可正常即时生成实例。
实例定时时间在正常执行的区间
-
场景一:新建节点当天生成真实运行的周期实例,配置调度时,实例定时调度时间是节点发布生成实例时间的未来时间,两个时间点之间的差值大于10分钟,则会正常调度实例,详情可参见:新建节点发布后选择即时生成实例。
-
场景二:更新节点配置后,且实例定时调度时间是节点发布生成实例时间的未来时间,且两个时间点之间的差值应大于10分钟,则会正常调度实例,调度的实例为更新后的实例。详情请参见:更新已发布任务的调度周期。
-
场景四:变更任务定时时间,对下游依赖关系的影响。
-
变更后的实例调度时间点是节点发布生成实例的预定未来时间,且两个时间点之间的差值大于10分钟,则会正常调度实例,下游未运行的实例,将依赖变更后的新实例。详情可参见:变更任务调度时间,对下游依赖关系的影响。
-
变更后的实例调度时间点是节点发布生成实例的预定过去时间,则会生成空跑实例,下游未运行实例,将成为孤立节点,详情可参见:上下游任务实例生成方式不一致。
-
不建议在修改生产节点调度配置时使用该功能。该功能可能存在依赖关系变更、依赖关系错乱、实例替换、实例被删除等现象,导致当天依赖关系变得复杂,但第二天任务依赖关系会恢复正常。
实例定时时间在空跑的区间
定时调度时间在节点发布时间的过去时间,仍会生成自动调度的周期实例,但实例会空跑,实例状态为实时生成的过期实例,不会生成真实运行代码逻辑,详情可参见:新建节点发布后选择即时生成实例。
-
场景一:实例定时调度时间是节点发布生成实例的预定未来时间,两个时间点之间的差值应小于10分钟。该实例状态为实时生成的过期实例。
例如:A节点的定时调度时间为
09:05,而节点的发布时间为09:00。若实例的调度时间点位于节点发布生成实例时间点的未来时刻,并且两者之间的时间差小于10分钟,则A节点将生成实时生成的过期实例的空跑实例。 -
场景二:实例定时调度时间点是节点发布生成实例时间的过去时间点,立即生成实时生成的过期实例。
例如:A节点的调度时间配置为
09:00,发布时间为10:00,实例生成时间点在发布时间点之前。则A节点立即生成实时生成的过期实例的空跑实例。
常见即时生成实例场景说明
使用发布后即时生成方式生成实例时,相关功能场景的实例运行及上下游依赖情况如下: