azkaban工作流调度器
azkaban简介
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等,各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行
它有如下功能特点:
- Web用户界面
- 方便上传工作流
- 方便设置任务之间的关系
- 调度工作流
- 认证/授权(权限的工作)
- 能够杀死并重新启动工作流
- 模块化和可插拔的插件机制
- 项目工作区
- 工作流和任务的日志记录和审计
azkaban安装部署
首先下载azkaban安装包:
1.Azkaban Web服务器:azkaban-web-server-2.5.0.tar.gz
2.Azkaban执行服务器:azkaban-executor-server-2.5.0.tar.gz
3.Azkaban的sql建表脚本:azkaban-sql-script-2.5.0.tar.gz
将安装文件上传到集群,最好上传到安装 hive、sqoop的机器上,方便命令的执行
root@s100:~/Downloads# mkdir /root/azkaban root@s100:~/Downloads# tar xf azkaban-web-server-2.5.0.tar.gz -C /root/azkaban/ root@s100:~/Downloads# tar xf azkaban-executor-server-2.5.0.tar.gz -C /root/azkaban/ root@s100:~# cd azkaban/ root@s100:~/azkaban# mv azkaban-web-2.5.0 server root@s100:~/azkaban# mv azkaban-executor-2.5.0 executor
创建zakaban数据库,将azkaban建表sql导入到azkaban数据库中,目前azkaban只支持 mysql,这里使用外部的mysql数据库
#进入mysql mysql> create database azkaban; mysql> use azkaban; Database changed mysql> source d:\azkaban-2.5.0\create-all-sql-2.5.0.sql;
因为azkaban需要使用https协议来连接,所以这里需要使用ssl配置来创建安全连接证书
root@s100:~/azkaban# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: goser
What is the name of your organizational unit?
[Unknown]: tech
What is the name of your organization?
[Unknown]: ruinan
What is the name of your City or Locality?
[Unknown]: Shanghai
What is the name of your State or Province?
[Unknown]: shanghai
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=goser, OU=tech, O=ruinan, L=Shanghai, ST=shanghai, C=CN correct?
[no]: y
Enter key password for <jetty>
(RETURN if same as keystore password):
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".
#完成上述工作后,将在当前目录生成 keystore 证书文件拷贝到 azkaban web服务器根目录中.
root@s100:~/azkaban# cp keystore server/
由于azkaban需要根据系统的计划安排来做调度,就需要配置时区
root@s100:~/azkaban# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #如果/Asia/Shanghai时区不存在,就需要使用用交互式命令 tzselect来创建
azkaban web服务器配置
root@s100:~/azkaban/server/conf# vim azkaban.properties #Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=web/ default.timezone.id=Asia/Shanghai #Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml #Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=192.168.1.3 mysql.database=azkaban mysql.user=root mysql.password=123 mysql.numconnections=100 # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=123456 jetty.keypassword=123456 jetty.truststore=keystore jetty.trustpassword=123456 # Azkaban Executor settings executor.port=12321 # mail settings mail.sender= mail.host= job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache
azkaban web用户配置
root@s100:~/azkaban/server/conf# vim azkaban-users.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
azkaban 执行服务器配置
root@s100:~/azkaban/executor/conf# vim azkaban.properties #Azkaban default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins azkaban.jobtype.plugin.dir=plugins/jobtypes #Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=192.168.1.3 mysql.database=azkaban mysql.user=root mysql.password=123 mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50
启动azkaban的web服务和执行服务
root@s100:~/azkaban/executor# bin/azkaban-web-start.sh root@s100:~/azkaban/executor# bin/azkaban-executor-start.sh
通过https://192.168.1.100:8443来连接azkaban服务,使用admin用户,admin密码登录azkaban服务,界面如下:

登录azkaban后就可以创建project,在project下就可以创建job了,例如创建一个操作hdfs的job
# fs.job #job的类型为command命令 type=command #command命令可以直接写命令,也可以写shell脚本,如command=/bin/bash test.sh #如果有脚本的话,这个脚本要和job文件一起打包成一个zip文件 command=/home/hadoop/app/hadoop-2.6.4/bin/hadoop fs -mkdir /azaz
然后将这个job文件打包成一个zip文件上传到azkaban项目中,最后执行这个job即可

job执行成功后就可以到hadoop上验证是否执行成功

下面运行一个job,让azkaban来调用hive处理数据
首先创建一个job
# hivef.job type=command command=/soft/hive/bin/hive -f 'test.sql'
根据job定义的command还需要一个test.sql
use default; drop table aztest; create table aztest(id int,name string) row format delimited fields terminated by ','; load data inpath '/aztest/hiveinput' into table aztest; create table azres as select * from aztest; insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;
准备需要上传到表aztest中的数据,在hadoop上创建两个目录
root@s100:/soft/flume/conf# hadoop fs -mkdir -p /aztest/hiveinput root@s100:/soft/flume/conf# hadoop fs -mkdir -p /aztest/hiveoutput root@s100:~# hadoop fs -put az.data /aztest/hiveinput
最后将hivef.job和test.sql打包成一个zip文件hive.zip上传到azkaban执行即可。执行的结果就是在hadoop的/aztest/hiveoutput/下生成了一个统计数据

当然也可以通过azkaban来调用mr的操作,只要写个mr的job即可。。。。
浙公网安备 33010602011771号