在配置单个项目azkaban调度,依赖配置好之后,直接丢在azkaban上面就好,单个项目还好,存在多个项目依赖的时候,azkaban配置就会存在问题,他不能直接依赖别的项目,只能通过时间差来进行配置,这个里面存在如果上一个项目报错或者因为资源紧张导致上一个项目没有跑完,直接导致现在这个项目不是最新的数据
--下面提供一种解决方案
比如项目B需要依赖项目A,或者需要依赖项目A里面的几个job,可以在配置项目A job 的时候加入一个当前时间写入到一个文件里面,项目B在执行之前需要判断项目A是否执行完毕
具体代码:
1、首先准备一个shell脚本 date_log.sh,把当前时间写入到一个文件夹里面
#! /bin/bash echo `date +"%Y-%m-%d %H:%M:%S"` > /data/date_log.txt
2、在项目B需要依赖A里面job里面添加这个命令
command=sh date_log.sh
3、在项目B执行之前需要添加一个判断是否执行完毕的job,就可以解决
#! /bin/bash
cat /data/date_log.txt | while read line
do
if [[ ${line:0:10} -eq `date +"%Y-%m-%d"` ]] && [[ $line < `date +%F' '%T` ]];
then echo '开始执行'
else 1/0
fi
done