这篇文章主要针对azkaban最新版本(3.35.0)的一些常用功能做一些介绍



1.azkaban的command执行模式参数传递



1.1 在job中可以定义运行时需要接受的参数:

#A.job
dateparam=2017-09-09
type=command
command=echo "This A job,current date is:"${dateparam}
command.1= sleep 1

azkaban运行job A时,${dateparam}参数从上面定义的dateparam变量中获取

azkaban创建python job azkaban调度python_azkaban创建python job



1.2 管控台界面执行时传参:

#B.job
type=command
command=echo "This B job,runing param:"${testparam}
command.1= sleep 2

job B在执行的时候需要用到${testparam}这个参数,该参数并未指定,需要在执行对应flow的时候动态传递

azkaban创建python job azkaban调度python_python_02

azkaban创建python job azkaban调度python_数据库_03

 

注意:若.job文件中有定义参数,运行时界面上也有传递相同的参数,则对应job会取.job文件中定义的参数,因为运行时界面上传递的是flow param相当于全局变量,而.job文件中定义的参数是针对具体job生效的,相当于局部变量



2.断点续跑功能

其实并没有端点续跑这个专有名词,这是我们自己的说法

在flow C中,job B想要正确运行的话是需要接受运行时参数${testparam}的

azkaban创建python job azkaban调度python_执行计划_04

azkaban创建python job azkaban调度python_新版本_05

首先不传递参数,直接执行,报错相信信息如下

azkaban创建python job azkaban调度python_python_06

azkaban创建python job azkaban调度python_数据库_07

 

因为job A已经成功执行,job B因为没有接收到参数${testparam}而执行失败。job C依赖于job B,因为job B的执行失败而被取消执行,在很多场景下,我们可能会想要重新执行这个flow中失败的job(即我们所说的端点续跑),azkaban就有提供这个功能,点击History列表中对应的Execution Id,进入执行流程图详情页

azkaban创建python job azkaban调度python_azkaban创建python job_08

点击Prepare Execution,可以看到这时候job A是处于Disable状态的

azkaban创建python job azkaban调度python_数据库_09

这时候添加job B所需要的参数,继续执行

azkaban创建python job azkaban调度python_azkaban创建python job_10

再从History列表中进入详情查看,发现azkaban已经将刚才执行失败的job重新执行了一遍:

azkaban创建python job azkaban调度python_数据库_11

azkaban创建python job azkaban调度python_azkaban创建python job_12

当然重新执行的,也可以将job A的属性设为Enable,重新执行该flow中的所有job



3.指定某个flow由某台executor主机执行

该功能仅对管理员用户生效

azkaban创建python job azkaban调度python_数据库_13

因为我在服务器159和160都部署了executor主机,所以根据job执行的工作目录可以看出来useExecutor参数是否有生效

azkaban创建python job azkaban调度python_新版本_14

在数据库中配置了两台executor主机

azkaban创建python job azkaban调度python_python_15

executorId=1的时候对应的是159,159中executor项目部署在source_buit目录下

azkaban创建python job azkaban调度python_python_16

执行日志如下:

azkaban创建python job azkaban调度python_新版本_17

azkaban创建python job azkaban调度python_python_18

azkaban创建python job azkaban调度python_python_19

同理,配useExecutor=2的情况下,该flow将交给160这台主机处理

azkaban创建python job azkaban调度python_python_20

 



4.人性化的定时任务执行

能够根据flow的通配符设置列出最近的10次flow执行计划

azkaban创建python job azkaban调度python_执行计划_21

azkaban创建python job azkaban调度python_azkaban创建python job_22

 

在上图中,seconds并没有与列表中10次执行计划对应上(实际上seconds的配置保存后已经写入数据库,仅仅是界面我没有作相应修改,因为测试后秒级别执行并未生效),是我这边对azkaban源码进行了一个小小的改造,而azkaban本身也只是支持到min,由于azkaban的执行和job实际执行本身存在一定的时间差,所以并不能精确到秒级别,估计这也是azkaban只配置到min的原因,azkaban官方源码的配置如下:

azkaban创建python job azkaban调度python_执行计划_23