在azkaban的任务调度中,设置依赖可以完成对任务的调度,
脚本如下:
第一个job:命名为 ods_actlog.job
---
config:
#failure.emails: xx@xx
nodes:
- name: ods_actlog_sql_job
type: command
config:
command: sh ods_actlog.sh
第二个命名为 dw_actlog_product_view.job
---
config:
#failure.emails: xx@xx
nodes:
- name: dw_actlog_product_view_sql_job
type: command
dependencies=ods_actlog #设置依赖。后面是跟随的job
config:
command: sh dw_actlog_product_view.sh
这两个脚本指的是:第一个先执行,第二个后执行,具有先后顺序,这两个打包给azkaban后会自动判断依赖关系,结果为这样:
---------------------------------------------------------------------------------
另外就是想要设置各个job之间的并行执行
这时候就可以设置多个job的依赖同一个job。如下
第一个job是: dw_actlog_product_view.job
---
config:
#failure.emails: xx@xx
nodes:
- name: dw_actlog_product_view_sql_job
type: command
config:
command: sh dw_actlog_product_view.sh
第二个是: region.job
---
config:
#failure.emails: xx@xx
nodes:
- name: region_sql_job
type: command
config:
command: sh region.sh
这样两个本来是不相关的两个job,如果想要这两个job执行完了,在执行第三个job(第三个job依赖第一个和第二个的数据进行计算),这样的话添加第三个job:
mid_actlog_product_view.job
---
config:
#failure.emails: xx@xx
nodes:
- name: mid_actlog_product_view_sql_job
type: command
dependencies=dw_actlog_product_view,region #添加多个依赖,中间用逗号隔开
config:
command: sh mid_actlog_product_view.sh
这样的话,就是第三个job依赖第一个和第二个job了,必须等第一个和第二个job都执行结束,第三个job才能开始。
---------------------------------------------------------------------------------------------------------------
另外,我们想要一个job结束后,同时开启第二个和第三个job同时执行,那么这两个子job的依赖配置为第一个job以外,还需要配置一个结束的第四个job,这个结束的第四个job需要同时依赖第二个和第三个,这个必须由,就算是没有job需要写了,也需要写一个空的job来同时依赖第二个和第三个job。
end.job
---
config:
#failure.emails: xx@xx
nodes:
- name: end_job
type: noop
dependencies=dm_actlog_product_view_region,dm_actlog_product_view
-----------------------------------------------------------------
这样的话,根据各个job之间的依赖关系就可以完成job之间的依赖并且并行执行,如下例: