Azkaban任务调度工具简述
Azkaban任务调度
Azkaban简述
Azkaban is a batch workflow job scheduler created at LinkedIn to run Hadoop jobs. Azkaban resolves the ordering through job dependencies and provides an easy to use web user interface to maintain and track your workflows.
Azkaban 是在LinkedIn上创建的批处理工作流作业调度程序,用于运行Hadoop作业。Azkaban通过作业依赖性解决订单,并提供易于使用的Web用户界面来维护和跟踪您的工作流程。
特征:
兼容任何版本的Hadoop
易于使用的Web UI
简单的Web和http工作流上传
项目工作区
调度工作流程
模块化和可插入
身份验证和授权
跟踪用户操作
有关失败和成功的电子邮件提醒
SLA警报和自动查杀
重试失败的工作
以上来自官方介绍,详情见 官网
为什么需要工作流调度系统
一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等
各任务单元之间存在时间先后及前后依赖关系
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下:
通过Hadoop先将原始数据同步到HDFS上;
借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
将明细数据进行各种统计分析,得到结果报表信息;
需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
工作流调度的实现方式
简单的任务调度:直接使用linux的crontab来定义;
复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban、airflow等
在hadoop领域,常见的工作流调度器有Oozie,Azkaban,Cascading,Hamake等
各种调度工具特性对比
下面的表格对上述四种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考:
特性 | Hamake | Oozie | Azkaban | Cascading |
---|---|---|---|---|
工作流描述语言 | XML | XML (xPDL based) | text file with key/value pairs | Java API |
依赖机制 | data-driven | explicit | explicit | explicit |
是否要web容器 | No | Yes | Yes | No |
进度跟踪 | console/log messages | web page | web page | Java API |
Hadoop job调度支持 | no | yes | yes | yes |
运行模式 | command line utility | daemon | daemon | API |
Pig支持 | yes | yes | yes | yes |
事件通知 | no | no | no | yes |
需要安装 | no | yes | yes | no |
支持的hadoop版本 | 0.18+ | 0.20+ | currently unknown | 0.18+ |
重试支持 | no | workflownode evel | yes | yes |
运行任意命令 | yes | yes | yes | yes |
Amazon EMR支持 | yes | no | currently unknown | yes |
Azkaban与Oozie对比
对市面上较流行的两种调度器。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
功能
两者均可以调度mapreduce,pig,java,脚本工作流任务
两者均可以定时执行工作流任务
工作流定义
Azkaban使用Properties文件定义工作流
Oozie使用XML文件定义工作流
工作流传参
Azkaban支持直接传参,例如:${input}
Oozie支持参数和EL表达式,例如:${fs:dirSize(myInputDir)}
定时执行
Azkaban的定时执行任务是基于时间的
Oozie的定时执行任务基于时间和输入数据
资源管理
Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
Oozie暂无严格的权限控制
工作流执行
Azkaban有两种运行模式,分别是soloserver mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
Oozie作为工作流服务器运行,支持多用户和多工作流
工作流管理
Azkaban支持浏览器以及ajax方式操作工作流
Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流
Azkaban安装部署
编译
使用版本:azkaban3.47.0
1 | tar -zxvf azkaban3.47.0.tar.gz -C ../servers/ |
编译成功如下图:
编译之后的文件
azkaban-exec-server
/export/servers/azkaban-3.47.0/azkaban-exec-server/build/distributionsazkaban-web-server
/export/servers/azkaban-3.47.0/azkaban-web-server/build/distributionsazkaban-solo-server
/export/servers/azkaban-3.47.0/azkaban-solo-server/build/distributionsexecute-as-user.c
/export/servers/azkaban-3.47.0/az-exec-util/src/main/c数据库脚本文件
/export/servers/azkaban-3.47.0/azkaban-db/build/install/azkaban-db
azkaban单服务模式
azkaban的solo server使用的是一个单节点的模式来进行启动服务的,只需要一个azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz的安装包即可启动,所有的数据信息都是保存在H2这个azkaban默认的数据当中。
1 | cd /export/softwares |
解决job任务一直处于running的状态
1
2 cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/ jobtypes/
vim commonprivate.properties重启azkaban
azkaban两个服务模式
Azkaban Web服务安装包
azkaban-web-server-0.1.0-SNAPSHOT.tar.gzAzkaban执行服务安装包
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz编译之后的sql脚本
create-all-sql-0.1.0-SNAPSHOT.sqlC程序文件脚本
execute-as-user.c程序安装Mysql数据库
……
安装完之后需执行
1 | mysql -uroot -p |
- 解压azkaban安装包
1 | tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/ |
- 安装SSL安全认证
1 | cd /export/servers/azkaban-web-server-3.47.0 |
web server安装
1 | cp -r /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/conf/ /export/servers/azkaban-web-server-3.47.0/ |
- 修改azkaban-web-server的配置文件
1 | cd /export/servers/azkaban-web-server-3.47.0/conf |
- 添加log4j.properties的配置文件
1 | cd /export/servers/azkaban-web-server-3.47.0/conf |
executor server安装
1 | cp -r /export/servers/azkaban-web-server-3.47.0/conf/ /export/servers/azkaban-exec-server-3.47.0/ |
- 添加插件
1 | mkdir -p /export/servers/azkaban-exec-server-3.47.0/plugins/jobtypes |
- 添加配置文件
1 | cd /export/servers/azkaban-exec-server-3.47.0/plugins/jobtypes |
启动web-server
bin/start-web.sh
启动exec server
bin/start-exec.sh