使用Azkaban依赖并行,依赖执行的坑......

第一坑:并行依赖

Azkaban为任务调度执行框架,在使用的时候 如果是有程序相互依赖的情况下,运行 java -ja 包名.jar 时候,千万不要添加后台运行命令  java -jar 包名.jar &

如果在使用后台运行,Azkaban  不会按照依赖流程来,会将依赖中的所有的 所有的Jar 的sell脚本直接按照顺序运行完毕,会进行并行,如果你业务需求是,串行,必然会出现问题!!!

Azkaban 任务调度是状态监控实际是监控当前Jar,端口进程

java -jar /mnt/test/test.jar  当前程序运行完毕,程序会退出,进程号 会被杀掉

如果是 java -jar /mnt/test/test.jar &  程序会后台运行,并且持续检测不到端口号,Azkaban 会直接给Azkaban的web页面返回运行完毕success

如果你写的是 Flow 工作流的模式,有依赖模式depend on A--->,在每一个Shell后面添加了&   ,那么Azkaban 不会等待 依赖进程按序执行完毕,而是按照循序依次执行完毕Shell脚本,并且退出程序,并且让程序并行! 你所写的依赖都会失败

第二坑:串行中断后续调用

①:比如 程序之间有相互依赖,但是程序 A 负责 数据拉去,程序B负责数据ETL,程序C负责数据标签计算工作,如果程序 A 今日数据拉取并未进行数据更新,程序 B 必然无法基于拉取数据进行ETL操作,程序 C 也无法针对新的数据进行标签计算,所以此处需要进行控制,有两种方案!

在Azkaban的运行WebUi页面获取下图

第一种:使用System.exit(1); 程序非正常退出,如果在 程序JobA 中是使用system.exit(1);会出现JobA 程序变为鲜红【表示程序异常】,后续JobB 和JobC会显示为浅红色,如下图所示:

颜色代表状态:鲜红色为: 【运行异常】

                         淺红色为: 【未运行,Cancelled(取消断开的)】

查看运行详细可知

JobA运行【失败】——>JobB运行【取消】——>JobC运行【取消

使用当前这种方法会使Azkaban  整个工作流程会显示为异常状态,很容易被人怀疑程序的健壮性,出现异常的问题!,如果设置了异常邮邮件提醒,如果每天没有拉取到数据,每天都会收到异常邮件,如果遇到真的异常你会很难发现!!!

【实际问题为:数据拉去并没有数据,并非程序异常问题,没有数据需要执行的操作就是退出所有程序,并且Azkaban运行流程为成功状态】

为解决上述需求,经过多次测试,如果按照需求,

设置,如果拉取数据为空,直接退出当前程序,但是,如果你使用的是Azkaban的依赖工作流程的话,JobA 退出了程序【return/system.exit(0)】,但是只会退出当前程序,并不会退出工作流,反而继续工作流的后续程序调用!

为解决工作流调度问题,使用第三方MySql使用判断标记的方法!

如果在数据拉去的时候,数据为空的时候,将MySql表中存一个标

Flag == 1      状态为正常

Flag == 0      状态为失败

if(Flag == 0){

return;//或者system.exit(0);                                                        //正常退出,状态为Succeess,页面状态为绿色, 

throw new RunntimeException("手动抛出异常")/system.exit(1);//非正常退出,状态为Fail,页面状态为红色

}else{

//继续调用后续业务代码

}

由此可知,在如果有工作流的情况下,并且需要在页面状态为Succeess,并且正常退出,不发送数据为拉去到的手动异常邮件,或者非正常退出的邮件! 

可以选择数据库建表 添加状态!!!

在每一个工作以来需要运行的时候 ,第一步 都会调用判断状态的方法,如果状态为1继续执行,如果状态为0停止当前调用,后续同样如此! 即可

Job A如图

Job B如图

Job C如图 

有上图可知,可以解决此次工作流的依赖 等問題...........................

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值