工作流调度器Azkaban学习

1、Azkaban是什么

        我们在工作中应该都遇到过这样的场景:有一个任务,这个任务可以划分成多个较小的任务完成,之所以进行划分是因为小任务之间可以并发的进行,例如是一个shell脚本执行的命令吧,大任务A可以划分成B、C、D、E四个子任务(脚本)完成,而B和C是可以同时进行的,D依赖B和C的输出,E又依赖D的输出,于是我们一般的做法可能就是开两个终端同时执行B和C,等两个都执行完成之后再执行D,接着在执行E。整个执行的过程都需要我们参与,但是整个的执行过程类似一个有向无环图,每一个子任务的执行可以看作整个任务的一个流,我们可以同时从没有入度的节点开始执行,任何没有流向(两个节点之间没有通路)关系节点都可以并行得执行,人为的控制难免就有点力不从心了(因为很多任务都需要在深夜执行,一般我们都是写脚本并设置cron),这时候我们需要的就是一个工作流调度器。
        Azkaban就是完成这种任务的(其实主要还是用于对hadoop生态圈的任务的支持),它是由Linkedin实现并开源的,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。
Azkaban有如下功能特点:
  • Web用户界面
  • 方便上传工作流
  • 方便设置任务之间的关系
  • 调度工作流
  • 认证/授权(权限的工作)
  • 能够杀死并重新启动工作流
  • 模块化和可插拔的插件机制
  • 项目工作区
  • 工作流和任务的日志记录和审计
      我觉得这些都是一些主流的工作流调度器应该支持的功能,我觉得azkaban的web页面做得比较好,这样可以大大降低管理成本,它支持的任务调度类型是基于插件的,这也就使得我们可以实现自己的插件来完成特定的需求。另外,它还能够在任务完成、失败、成功的时候发送email,支持SLA设置等功能,总体来说,功能还是很强大的。

2、安装部署

      azkaban分为三个组建:mysql服务器、web服务器和executor服务器,其中mysql用于存储一些项目以及执行计划(所有任务的属性信息、执行计划、执行的结果以及输出),每次执行情况等信息;web服务器使用Jetty对外提供web服务,是用户可以通过web页面方便的管理;执行服务器是负责具体的工作流的提交,执行,可以启动多个执行服务器,它们通过mysql数据库来协调任务的执行。

      首先需要从官网上下载各个模块,都是二进制的安装包格式,当然也可以使用源码编译,下载地址:http://azkaban.github.io/downloads.html
接下来的安装过程可以参考:http://blog.javachen.com/2014/08/25/install-azkaban/
因为web客户端是通过https的方式进行访问的,所以这里需要创建一个keystore证书文件,使用命令:keytool -keystore keystore -alias jetty -genkey -keyalg RSA,按照提示输入需要的信息,最后输入的”输入 <jetty> 的密钥口令“可以和密钥库口令一样,并且需要在web服务器的配置文件azkaban.properties中修改Jetty服务器的属性,其中
jetty.keystore=keystore
jetty.password=redhat
jetty.keypassword=redhat
jetty.truststore=keystore
jetty.trustpassword=redhat
      设置为你生成的证书文件的信息。接着就可以在浏览器中输入https://ip:8443访问azkaban了(登录的用户名和密码是在web服务器的user配置文件中设置的,这里我们使用的是admin)。

3、测试

      这里我们进行简单的测试,由于azkaban原生是支持shell命令
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值