# Azkaban

# Azkaban3 任务流重新生成程序

RebuildFlow是一个Azkaban3的任务流重新生成程序,当AZ中一个任务执行失败,后续任务又互相依赖错综复杂的时候,数据恢复将异常困难,该程序可以将后续相互依赖的任务整合重新生成一个完整的任务流。方便用户调试及数据恢复。

WARNING

注意!!!该程序并不具备通用性(见下文)。但你仍然可以通过该程序了解到 Azkaban 项目数据库中表关联逻辑,二进制字段的解码方法等信息。

因为本程序具备一定独特性,并不适合所有使用AZ3的环境,可能需要进行适当修改:

  • 本程序仅支持类型为command的任务流,不支持嵌套流(Embedded Flows)。
  • 若各项目之间的job互相依赖,判断前置依赖成功的任务需以wait_前置依赖job名.job格式命名。例如Finance项目中的fiance_flow任务流中的任务依赖Order项目据中的order_flow任务流中的order_master.job任务。则Fiance_Flow中判定order_master.job成功的任务应该命名为wait_order_master.job。
  • 所有任务流最后一个节点以_flow结尾,例如order_flow.job。
  • 所有的job名字需要唯一

以上规则可确保我们的程序正确识别各Job的依赖关系并生成新流。

# 使用例子

Azkaban3 任务重跑程序

optional arguments:
  -h, --help            show this help message and exit
  -f FORWARD, --forward FORWARD
                        起始Job:必填,Job名称用逗号分隔。程序会将所有下游依赖打包成一个新的任务流。(起始Job空跑)
  -i INVERSE, --inverse INVERSE
                        指定关键Job,以逗号分隔。指定该参数可以只跑起始Job和关键Job之间的所有依赖任务。(起始Job空跑)
  -p PERIOD, --period PERIOD
                        执行周期:参数值为daily或者all. 默认为daily,即只取每天有调度的任务
  -pre PREFIX, --prefix PREFIX
                        指定Job前缀,以逗号分隔,匹配到的Job会直接空跑
  -pos POSTFIX, --postfix POSTFIX
                        指定Job后缀,以逗号分隔,匹配到的Job会直接空跑
  -re REGULAR, --regular REGULAR
                        通过正则匹配到的Job会直接空跑
rebuildflow.py -f task1,task2

以上命令执行后会在当前目录建立一个RebuildFlow文件夹和打包好的RebuildFlow.zip。可以手动调整,或者直接上传zip包到Az3。

# 程序运行环境

  • Python 3.6.4,所需模块mysql-connector
  • 将·database.py中的config`部分改为你Azkaban 的数据库地址