概述
LinkedIn开源的轻量级工作流调度器(任务调度框架),Java语言编写,支持Web UI界面,配置和操作简单,支持定时任务和脚本,SLA告警、完善的权限控制。
官网GitHub下载地址
功能包括:
- 兼容Hadoop版本
- Web UI和Http工作流上传简单易用
- 项目工作区
- 工作流调度
- 模块化和插件化
- 认证和授权
- 用户行为跟踪
- 邮件告警失败和成功
- SLA告警
- 重启失败的任务,即失败重试,且只重视失败的单元并非从头跑整个任务
架构
三个关键组件
- Relational Database:存储大部分执行流状态等元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等
- WebServer:项目管理、权限授权、任务调度、监控executor,整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务;持久化所有的SLA规则;
- ExecutorServer:作业流执行的Server,负责具体工作流的提交、执行,通过数据库来协调任务的执行;存储作业的输出日志,并将其流入数据库;如果一个流在不同的执行器上运行,它将从数据库中取取状态
对比
常见的工作流调度器:Ooize、AirFlow、Zeus
特性 | Oozie | Azkaban | AirFlow | Zeus |
工作流描述语言 | XML | text file with key/value pairs | ||
是否要Web容器 | Yes | Yes | ||
进度跟踪 | web page | web page | ||
Hadoop Job调度支持 | yes | yes | ||
运行模式 | daemon | daemon | ||
事件通知 | no | Yes | ||
需要安装 | yes | yes | ||
支持的Hadoop版本 | 0.20+ | currently unknown | ||
重试支持 | workflownode evel | yes | ||
运行任意命令 | yes | yes |
实例
支持的任务类型:command形式的Linux命令、java语言打包的jar。
目前,Azkaban上传的工作流文件只支持xxx.zip文件。作业名称在项目中必须是唯一的。
JOB实例
简单无依赖任务
新建文件hello.job
,后缀名固定,必须以.job
结尾:
type=command
command=echo "Hello Azkaban"
将该文件打包为hello.zip
,可上传至Web端。
依赖任务
新建文件job1.job
type=command
command=echo "Hello task 1"
新建文件job2.job
type=command
dependencies=job1
command=echo "Hello Azkaban"
将该文件打包为job.zip
,可上传至Web端。
脚本执行任务
command填写脚本的绝对路径或压缩包里面的脚本文件:
type=command
command=/usr/local/hadoop-2.7.6/bin/hadoop fs -mkdir /Azkaban
# sqoop.sh需要加上文件头:#!/bin/bash
command=sh sqoop.sh
报错:
azkaban.utils.UnderfinedPropertyException: Missing required property 'azkaban.native.lib'
解决方法:
在exec-server
目录下,执行命令:
vim plugins/jobtypes/commonprivate.properties
# set execute-as-user
execute.as.user=false
# 追加
azkaban.native.lib=false
Flow实例
新建文件flow_demo.project
:
azkaban-flow-version: 2.0
新建文件flow_demo.flow
---
config:
#failure.emails: xx@xx
nodes:
- name: flow_demo
type: command
config:
command: sh flow_demo.sh
新建文件flow_demo.sh
#!/bin/bash
yesterday=`date -d "-1 day" +"%Y%m%d"`
echo "Hello , $yesterday"
打包为flow_demo.zip
版本区别
2是Job;
3是Flow
定时器设置;
安装
分Web可视化界面和Exec执行器。
参考