Azkaban任务动态参数小结

1. 数仓任务调度案例

每日凌晨,我们会将业务数据库同步到数仓中,并进行清洗和相关指标的计算,然后导出到PostgreSQL中给业务系统使用,整个过程可以通过Azkaban进行调度执行。

  • job编写

    job内容是执行对应的shell脚本,执行对应的任务,比如hive的脚本等。job的执行顺序依靠dependencies来描述,A 依赖B,则B先执行。

    多个依赖用逗号分隔。
    在这里插入图片描述

    import_log.job

    type=command
    do_date=${dt}
    command=/root/bin/sqoop_import_mp_log.sh all ${do_date}
    

    import_user.job

    type=command
    do_date=${dt}
    command=/root/bin/sqoop_import_mp_user.sh all ${do_date}
    

    ods.job

    type=command
    do_date=${dt}
    dependencies=import_log,import_user
    command=/root/bin/ods_db.sh  ${do_date}
    

    dwd.job

    type=command
    do_date=${dt}
    dependencies=ods
    command=/root/bin/dwd_db.sh  ${do_date}
    

    dws.job

    type=command
    do_date=${dt}
    dependencies=dwd
    command=/root/bin/dws_db.sh  ${do_date}
    
    

    ads.job

    type=command
    do_date=${dt}
    dependencies=dws
    command=/root/bin/ads_db_log.sh  ${do_date}
    
    

    export.job

    type=command
    dependencies=ads
    command=/root/bin/sqoop_export.sh all
    
  • job上传

    将上面的多个job文件压缩成一个zip包;然后创建一个Project,然后上传对应的zip包

在这里插入图片描述

  • 执行参数传递

    如果想动态传递参数,比如日期等每次都会变的参数,可以参考案例2

在这里插入图片描述

  • 执行任务

    可以手动执行(点击Execute),也可以设置定时执行(点Schedule设置定时计划)。设置好后,可以查看定时计划。例如下面的例子:每周1-5的凌晨1点会执行计划。

在这里插入图片描述

2.动态传参任务案例

上面例子中设置参数适合固定不变的参数,因为数仓中hive脚本中如果传入日期为空,会取前一日时间作为参数,因为我是设置了凌晨1点执行进行前一日数据的同步落盘, 所以上面我没有设置参数,但是有些情况,日期需要动态设置传递给job任务。这时,有一个取巧的做法就是增加一个写参数的任务,将参数写入文件,然后在需要的job中读取文件即可。

在这里插入图片描述

Azkaban运行过程中的参数环境变量介绍:

  • Parameter Passing:参数传递

    azkaban以job执行过程中,传递进来的临时参数,运行时参数,项目中配置文件的参数,job定义中参数等 都保存在 ${JOB_PROP_FILE}文件中,保存格式为key=value。执行job的中shell命令时,可以作为参数传递。
    JOB_PROP_FILE 是一个环境变量参数。

  • Parameter Output:参数输出

    一个任务运行结束,可以将一些参数写入到${JOB_OUTPUT_PROP_FILE}文件 中,azkaban会将这些参数传递到下游依赖的的job的参数文件​${JOB_PROP_FILE}文件中,供下游job引用。
    写如到${JOB_OUTPUT_PROP_FILE}文件中参数需要是json格式的,否则会报json解析错。
    JOB_OUTPUT_PROP_FILE也是一个环境变量参数。

第一步: 编写job

最终结果如下: 四个job文件,一个sh脚本。最终打包为dyparm.zip

[root@nn jobTest]# ll
total 24
-rw-r--r-- 1 root root 935 May 25 15:42 dyparm.zip
-rw-r--r-- 1 root root 454 May 24 16:21 rd.sh
-rw-r--r-- 1 root root  95 May 24 16:16 step1.job
-rw-r--r-- 1 root root  73 May 24 16:19 step2.job
-rw-r--r-- 1 root root 103 May 24 16:20 step3.job
-rw-r--r-- 1 root root 107 May 25 15:36 step4.job

step1.job:这里第一个job就是获取当前日期,写入文件中

#step_1.job
type=command
command=whoami
command.1=/bin/sh -c "date '+%Y-%m-%d' > rundate.text"

step2.job:第二个job只是打印一句话并在job1之后执行,可以认为是正常的job

#step_2.job
type=command
dependencies=step1
command=echo 'this is step2'

step3.job:第三个job将执行rd.sh脚本,该脚本的作用是将job1写入文件的日期注入到Azkaban环境变量中,供其他Job使用。

#step_3.job
type=command
dependencies=step2
command=whoami
command.1=/bin/bash /opt/soft/jobTest/rd.sh

rd.sh

#!/bin/sh
# this script takes the run_date value from the text file and passes it to Azkaban
# Now, the variable can be used in the next step of the job

RD=$(cat rundate.text)

echo "Now setting Job Output Property File with RD (run date) variable"
echo $RD


#This is the point where the parameter is written in JSON format
#to the JOB_OUTPUT_PROP_FILE, which allows it to be used in the next step
echo '{"RD" : "'"$RD"'"}' > "${JOB_OUTPUT_PROP_FILE}"

step4.job:该job取出第三步注入的环境变量RD进行使用

# step_4.job
type=command
dependencies=step3
command=whoami
command.1=bash -c "echo ${RD} is the run date"

最终结果:

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值