Azkaban:来自Linkedin的批量工作流任务调度器

jopen 9年前

Azkaban是由Linkedin开源的一个批量工作流任务调度器。Azkaban来自LinkedIn公司,用于管理他们的Hadoop批处理 工作流。日常生产环境中,为了得到想要的数据,通常需要执行很多作业,一批作业执行完毕,再将中间结果进一步处理,最后得到有价值的数据,因此作业之间执 行有先后顺序和依赖关系。这样的一组作业称为一个工作流,Azkaban就是用来构建、运行和管理工作流的工具,它提供友好的Web用户界面来维护和跟踪 用户的工作流程。Azkaban已经在LinkedIn运行了好几年,管理着很多Hadoop和数据仓库作业流,具有很强的可用性。

简单来讲,它有几个特点:

  • 兼容各个版本的hadoop
  • 用户可通过web页面提交工作流,方便上传工作流,方便设置任务之间的关系
  • 工作流调度
  • 系统模块化和可插拔的插件机制
  • 用户认证和权限验证
  • 用户操作追踪
  • 任务执行结果邮件报警
  • 按照SLA执行报警和杀作业
  • 失败作业重试,能够杀死并重新启动工作流
  • 项目工作区
  • 工作流和任务的日志记录和审计

Azkaban目前有2个大版本,azkaban1.x和azkaban2.x,1系结构比较简单,不需要依赖数据库,执行器和调度器以及 webServer都集成在一起,缺点是没有用户和权限管理,其它功能不够丰富,随着用户规模增大和系统健壮性需求,azkaban系统演进到最新2.x 版本。

Azkaban 2由三个重要的组件组成

Azkaban:来自Linkedin的批量工作流任务调度器

  • Azkaban Web Server:Azkaban使用Jetty作为Web服务器,除了提供web页面响应服务,还负责项目管理,认证,调度,监控和发起执行,它是azkaban的大脑。
  • Azkaban Executor Server:负责作业的执行,对执行过程及结果进行监控,并将执行状况汇报给Azkaban Web Server,两者采用http接口进行通信。
  • MySQL: 负责存储azkaban系统的数据,包括用户上传的工作流文件、作业执行的日志等。Executor Server和Web Server都通过jdbc频繁地对其操作。

任务调度

Azkaban里面除了按时间指定任务何时启动,还可以指定任务周期:就是任务的重复执行频率。这对于那些需要每天或每小时重复执行的任务很有用。 除了设置时间,还能设置任务的失败策略和报警机制。比如可以选择是第一次失败就报警,还是整个流完成后报警。对于工作流中的单个任务还可以设置是否启动。

插件机制

Azkaban支持可插拔的扩展插件,以便提供更多功能,更好的支持其他系统。例如hdfs查看插件可以查看hadoop上的文件。而job类型插 件则能够定义具体的任务的启动和执行方式,包括hive,pig等。用户可以方便的扩展插件来支持不同的hadoop版本,或者支持其他的系统。

权限管理

一个登陆用户对一个项目可以有以下五种权限:

  • ADMIN:最高权限,可以胡作非为,包括添加其它用户权限和删除项目
  • READ:查看作业、工作流、和相关日志
  • WRITE:上传、修改项目工作流文件
  • EXECUTE:执行、暂停、取消作业。execute, pause, cancel jobs
  • SCHEDULE:添加、修改、删除工作流调度命令

项目主页:http://azkaban.github.io/azkaban2/

引用地址:http://www.biaodianfu.com/azkaban.html