调度配置说明--零碎记录(让我自己删)

  • 文档创建者:Wendy123456
  • 历史版本:6
  • 最近更新:Wendy123456 于 2024-09-09
  • 注意事项

    • 调度时间仅定义任务预期执行时间,其实际执行时间还受上游执行情况控制

    • DataWorks上任务一旦设置依赖,即表示上下游任务间存在数据依赖。无论下游任务定时运行时间为几点,均需等上游任务执行完成后,下游才满足可执行条件



    下游任务一旦挂载依赖,若上游任务非运行成功状态,即使到达下游任务的定时运行时间,该任务也不会执行。


    其他说明

    任务各周期是通过实例的方式执行

    调度任务会根据调度类型及周期数生成相应的周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),通过实例的方式运行任务。周期任务设置的依赖关系,其本质是任务间所生成实例的依赖。上下游任务的调度类型不同,其生成的周期实例数及实例的依赖情况不同。


    就近原则:

    • DataWorks的周期任务运行时会生成多个周期实例,下游周期实例会依赖上游周期实例(该上游实例需在当前下游实例的定时运行时间之前产生)。

    • 下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行。





    下游依赖上游时:

    •  用的是相同周期的结果,

    • 还是上一周期的结果.

    • 其中跨周期依赖还可以依赖自己的上一个实例.

    fdl目前没有周期的概念. 也没法实现自依赖.-----内置参数可以?

    fdl目前只能依赖于上游任务在指定时间范围内的所有实例.

    目前的增强依赖会把所有存在依赖关系的任务放到一个依赖图中. 但这样会因为有维度表的存在, 导致不同业务域的任务全都出现在一个依赖图中.

    而DataWorks支持通过 依赖其他节点 的方式, 依赖工作空间/业务流程的输出表


    问题:

    下游任务每次执行前是检查上游任务的最近一次执行记录,然后根据条件判断是否执行吗;如果A依赖任务B,任务B周执行一次,A每小时执行一次,A每次都是根据B的上周记录判断的?

    1、小时任务依赖天任务,天任务设置每天08:00执行,小时任务在08:00之后,每小时执行一次吗

    下游任务的定时运行时间若早于上游任务,即便到达下游任务的定时时间,该任务也不会被调度,需等待上游任务运行完成后才会调度运行?

    2、如果设置了事件调度,但下游任务又设置了定时调度,是排队吗

    3、小时任务依赖小时任务:

    • 上下游周期数(即生成的实例数)一致

      上下游任务运行当天生成的周期实例,将一一对应挂载依赖。即下游首个实例依赖上游首个实例,下游第二个实例依赖上游第二个实例,以此类推。

    • 上下游周期数(即生成的实例数)不一致

      上下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近(在当前实例定时时间之前,或与当前实例定时时间一致)的上游实例。

    当上游周期数小于下游周期数时,下游多个周期实例可能会依赖同一个上游周期实例。

    4、小时任务依赖天任务




    1. 几种调度模式

    1.1 定时调度

    周期性调度,设置定时任务的执行频率。

    批量设置任务的调度

    功能简介:

    可为定时任务设置执行频率,定期自动运行定时任务,以保证数据能够及时更新,一个定时任务可设置多个执行频率

    应用场景:

    任务本身按照频率执行

    数据仓库周期性数据变化

    每天交易数据的抽取加载(当天将前一天数据更新入库)

    优势:

    易于管理和维护、规则简单




    金融类外企/银行的工作日和节假日执行时间非正常工作日,定时任务的调度时间需要自定义

    目前 corn 表达式的使用成本比较高,需要降低使用成本

    客户需要在各交易所工作日表/节假日等时间执行一些调度。

    某些任务希望能够在法定节假日不执行,同时因为客户这边有多个地区的法定假日规则,希望可以自定义工作日&法定假日日历(客户跨国际业务,需要支持不同国家节假日,这个不是核心阻塞需求)

    客户会维护一张数据表,将需要任务执行的日期按照客户行业的特征进行个性化设计。调度配置可以读取数据表,若当天不在日期表内,则控制 fdl 任务不执行。自定义调度



    定时任务调用接口

    调用接口就能执行任务A

    高度灵活,实时响应用户系统数据的变化

    执行过程中需要基于外部事件或者触发器,比如数据库表中的变更数据,通过外部业务系统推送实时变更数据,实时响应的实时数据处理

    接口:定时任务相关接口介绍

    示例:FR模板调用定时任务接口示例



    1.2 事件调度

    可以不立即触发;批量设置任务的调度

    应用场景:

    多任务间的调度

    用户设置好数仓任务后,设置上游任务在上午更新,希望下午资源空闲时分去定时触发下游大表更新。

    用户希望 ods 层任务完全更新成功之后,更新后会一起触发一次下游 dw 层任务。

    用户设置 A、B 任务触发 D 任务,A、B任务都失败,未触发下游任务 D,希望能够重跑任务,若两个任务均重跑成功则触发下游任务。

    a/b/c任务设置3点之后执行,执行完成则触发d任务执行

    a任务成功则触发b任务

    多任务事件触发单任务;a任务的某两个节点成功 则触发b任务执行

    多任务事件触发多任务;a/b/c任务成功则触发b/d/f任务自动执行

    https://kms.fineres.com/pages/viewpage.action?pageId=1003881288

    数仓场景:

    • 任务分层,但是每个层级里的任务调度频率不一致;

      • 主要问题:集群调度并发是400,一个ODS-MES层300个任务会配在一个批量调度计划中,但是仅需要调度计划内去配并发10个任务,一下子跑300任务会对同个数据库造成巨大压力。

      • 主要问题:简道云的大表8000w需要在下午空闲时间去触发执行,需要判断上游任务是否是最新数据,而不是上游跑完立即触发造成资源紧张。

      • ods层每个任务的频率是不一致的,一个任务一张表,有分钟/小时/天任务,小时级任务仅需触发一次天任务即可,调度都是配在单个任务里的,不会用批量调度计划,所以依赖也是单独配任务。(信息组)

      • 数仓分层,ods层是调度频率不一致的,基本也是一个任务一张表,维度表——>事实表,下游会根据任务去配,更期望使用拖拉拽可视化方式去配置,目前的易用性客人更愿意去用调度任务配置并且关系更清晰。

    • 任务分层,每个层级的调度频率相对一致;

      • ods 层是一个批量调度计划,dwd层的也是一个批量调度计划,dwm层里的任务会有依赖关系:维度表—>事实表,dws 层也是有先后依赖关系的。数仓层级大关系是客户一定要ods层跑完才会跑dwd层,并且每个任务一天就跑一次。(江苏固德威电源科技股份有限公司)

    • 任务分层,每个层级调度频率一致,但是需要错峰依赖。

      • ODS层的A/B任务先跑完就可以触发DW层的C任务了,不用等ODS层所有任务都执行完,节省整体的任务调度时间。(海尔金控)

    调试场景:

    • 开发人员已经设置了依赖任务的配置,主场景①修改调试了上游任务中部分节点,触发了下游任务导致数据不准确的问题;次场景②中间任务存在紧急需求更改并需要执行时拉起部分下游任务,全部下游被拉起会造成资源浪费&耗时问题

    运维场景:

    • 运维人员在任务失败后利用实例重试补数据,痛点是该任务下游任务不会延续上游任务指定的时间参数,而是当前时间的参数,导致了下游数据数据不准确的问题。



    事件调度新优化:

    应用场景:

    • 客户有数据快照的场景,每天更新一遍,同时任务上下游有依赖关系,需要用到任务依赖,这样会存在一个问题。 假设有两个任务A,B,B依赖A。  A,B都是快照,每天更新一次。 如果前天的任务A跑失败了,使用补录功能, 给A传了前天的日期参数重新跑起来,那么B也会跟着跑,但是这时候B跑的就不是前天的数据,而是最新日期的数据。


    重试A时,B也会跟着执行,但其实不需要他实行

    调试的任务,不拉起下游任务

    • 调度周期执行前判断执行依赖的任务是否完成

    "期望调度周期执行前支持判断执行依赖的任务是否完成。
    客户目前没有替代方案。
    客户那边设置的ods层7点,dim层8点,dim层依赖ods层,客户期望到8点的时候,dim层判断下,ods层是否执行完毕,执行完毕就执行dim层,没有就不执行,等到ods层执行完毕再执行dim层。这是因为客户那边在做任务时,会避开某一层的执行时间,例如7.00到8点运行ods层任务,这段时间就不会去动相关任务。"       

    • 天任务依赖小时任务


    • 周任务依赖天任务,周任务一周一次,天任务一天一次:

    事件依赖可以控制下游的频率。

    • "依赖任务支持批量选择任务

    询问测试了,写的时候扒聊天记录


    场景
    使用流程模拟
    客户上游任务在上午更新,下午资源空闲时分,去定时触发下游大表更新

    事件调度,下游任务配置项中选择定时触发:每天下午1点触发

    由于是依赖的当天上游任务,则判断条件:所有上游任务在最近13小时内运行成功(即当天0点开始产生的最新运行记录参与判断)

    客户ods层任务完全更新成功之后,更新后会一起触发一次下游dw层任务

    事件调度,dw层任务配置项中选择立即触发

    由于ods层任务是设置晚上12点开始更新,一般更新时长最多为4小时内,则判断条件:所有上游任务在最近4小时内运行成功

    客户A、B任务触发D任务,A、B任务都失败了,未触发下游任务D

    点击A任务的实例重试,运行当前任务及下游,再点击B任务的实例重试,运行当前任务及下游

    A、B两次实例都会参与事件调度的判断,当A、B实例成功后触发下游任务D







    1.3 调用任务

    立即触发,A任务运行完就立即触发B了

    多任务间的调度

    父任务A调用子任务B,父任务A可以设置执行频率,等A完成,再执行B

    父任务可以给子任务传递参数

    父任务和子任务都设置了调度,如果父任务执行时,子任务正在运行,此时父任务触发子任务,则会进入排队等待状态

    父任务和子任务都设置了调度,多个父任务先后调用子任务时,子任务将排队执行,按照调用时间排队。

    用户希望可以在当前定时任务中调用平台内其他定时任务,被调用的任务被放到当前任务里编排,「调用任务」节点可满足该需求。


    应用场景:

    https://kms.fineres.com/pages/viewpage.action?pageId=292063648

    希望对任务能够设置执行依赖调用其他任务,完成跨任务的编排

    配置被调用的任务,可以选择:

    1. 除当前任务以外的任务,当前任务置灰或不在选择列表中。

    2. 拥有管理权限的任务,无权限的任务不在选择列表中。若对被调用的任务无管理权限,则不可查看,执行父任务时可正常调用运行。

    如果勾选了将当前任务的参数传递给子任务,那么定义的任务参数、参数赋值输出的参数都可以传递给子任务使用。

    • 任务定义的参数:子任务可以直接使用。

    • 参数赋值输出的参数:仅可被子任务的首个节点使用。

    、当A任务调用了B任务,并勾选了参数传递,只有在A任务内运行调用B任务时,A任务的参数才可以传递给B任务,单独在B任务内运行,不会获取到A任务里的参数

    、父子任务之间的运行没有强相关性,子任务单独运行时也不影响父任务的运行状态。如果子任务正在运行,父任务里也触发到子任务运行,则进入排队状态

    父任务构建失败时,子任务也都构建失败,且子任务无运行结果





    附件列表


    主题: 数据开发-定时任务
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!