上节主要介绍了安装搭建和简单的运行一个job,但是真正使用到实际场景还是需要了解更多的知识,比如任务怎么互相依赖,可以选择指定的节点来执行吗等等一些相关的操作会在本节中进行介绍
附上:
喵了个咪的博客:w-blog.cn
Azkaban官网: https://azkaban.github.io
官方文档地址: http://azkaban.github.io/azkaban/docs/latest
一 ,任务依赖
之前说的都是部署方式和一个简单的运行例子,那么像开头说的如果任务直接有依赖关系咋办呢? 那就需要用到 dependencies 关键字了
> mkdir azkaban_job
> vim azkaban_job/one.job
type=command
command=echo "this is job one"
> vim azkaban_job/tow.job
type=command
dependencies=one
command=echo "this is job two"
zip -r azkaban_job.zip azkaban_job/
二 ,指定exec运行对应的任务
笔者遇到了难题,现在Azkaban管着3个exec,其中2个是hadoop的一个是docker相关的,但是Azkaban选择执行任务的节点是更具节点的资源来调度的,那么就会出现跑docker相关的命令会跑到hadoop的服务器上,hadoop的命令会跑到docker服务器上,那么有没有办法指定任务执行的环境呢?
首先找到对应的ID
在运行任务的时候添加一个变量
PS:局限虽然可以指定在一台节点上执行,但是失去了高可用的优势,如果有不同类型的任务建议用多套azkaban
三 , 参数传递
当我在编写程序的时候常常会用到变量来去传递使用,使用变量的好处在于程序会应该不同的变量完成不同的事情,那么对于任务来说也是同样一个道理,比如我传递的数据库的链接地址的不同就决定了从哪个数据库获取源数据,为了程序的泛用性变量是不可缺少的,azkaban在job文件中也可以指定变量来接受每一次执行时不同的参数
azkaban变量替换格式是<${name}>,上传下面测试job文件
#command.job
type=command
command=echo 'hello ${name}!'
在运行前配置好要替换 &{name} 参数的具体的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9uyuirU1-1597140349428)(Azkaban%20%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%B3%BB%E7%BB%9F(%E5%B0%8F%E6%8A%80%E5%B7%A7)]/1FD3FC97-02F7-418C-B010-B84359CE2997.png)
最终在执行下来就可以看到参数已经被替换了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jqj0IrfT-1597140349428)(Azkaban%20%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%B3%BB%E7%BB%9F(%E5%B0%8F%E6%8A%80%E5%B7%A7)]/DA314DA7-DBB8-47AC-8C60-690AD5376B17.png)
四 , 邮件配置
应为任务是异步定时的,我们对于结果的感知往往没有手动跑脚本那么及时,但是如果任何一个任务运行失败可能都会引起一些列问题,在这个情况下消息通知就很重要了,azkaban支持邮件通知任务执行情况
首先要确保在编译的时候有按照本文搭建所示修改过azkaban-common/src/main/java/azkaban/utils/EmailMessage.java文件增加了下面这行代码
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
邮件配置只需要配置到azkaban.properties就可以了
> vim /usr/local/azkaban-web-server/conf/azkaban.properties
mail.sender= @qq.com
mail.user=
mail.host=smtp.qq.com
mail.password=
mail.tls=true
mail.port=465
在执行任务前配置成功失败的收件人
当任务执行完成就会收到如下邮件