Azkaban简介
官网:https://azkaban.github.io/
Azkaban是在LinkedIn上创建的批处理工作流作业调度程序,用于运行Hadoop作业。Azkaban通过作业依赖性解决顺序问题,并提供易于使用的Web用户界面来维护和跟踪您的工作流程。
- 兼容任何版本的Hadoop
- 易于使用的Web UI
- 简单的Web和http工作流上传
- 项目工作区
- 调度工作流程
- 模块化和可插入
- 身份验证和授权
- 跟踪用户操作
- 有关失败和成功的电子邮件提醒
- SLA警报和自动查杀
- 重试失败的工作
Azkaban的设计主要考虑了可用性。它已在LinkedIn运行了几年,并推动了许多Hadoop和数据仓库流程。
Azkaban VS Oozie
与Oozie相比,azkaba是一个轻量级调度工具。企业应用的功能不是小众化的功能都可以使用azkaba。
- 功能
两个任务流调度器可以调度使用mr,java,脚本工作流任务,都可以进行定时调度。 - 使用
azkaban是直接传参,而Oozie也是直接传参并支持EL表达式。 - 定时
azkaban定时执行任务基于时间,Oozie任务基于时间和数据。 - 资源
az有严格的权限控制,Oozie无严格的权限控制。
Azkaba安装部署
1)下载安装包,需要使用gradle打包源文件,按照官方文档提示操作。
https://github.com/azkaban/azkaban
或
网盘下载 提取码:c0wq
2)解压下载的文件
3)导入azkaban的脚本到mysql。
create database azkaban;
source create-all-sql-2.5.0.sql
4)创建SSL(安全连接),网盘的安装包需要一个证书,按提示输入密码。
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
需要把生成的keystore目录拷贝到azkaban-web目录下。
5)时间同步设置
如果在/usr/share/zoneinfo/Asia目录下没有Shanghai,则创建时区文件:
tzselect=>5=>9=>1
修改软连接:
li -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
下面命令可设置日期
date -s '2019-01-28 23:19:00'
6)修改配置文件azkaban-web/conf/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=localhost
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
# https访问的端口
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
# 生成ssl时输入的密码
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# Azkaban Executor settings,和azkaban.properties的executor.port参数对应
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
7)修改配置文件azkaban-executor/conf/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=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
8)修改azkaban-users.xml,添加一个服务器的用户:
<user username="admin" password="admin" roles="admin,metrics"/>
9)分别启动azkaban-web和azkaban-executor
bin/azkaban-web-start.sh
bin/azkabban-executor-start.sh
10)访问:
https://hd-even-01:8443
用户名和密码为在azkaban-users.xml中设置的。
Azkaban使用
项目创建
- 创建项目,描述信息不能是中文:
- 创建even_common.job文件,编写任务内容:
type=command
command=echo 'even learning azkaban'
- 把文件打包成zip压缩包,必须是zip格式:
- 上传压缩包
- 执行流程
- 页面显示绿色代表执行成功
- 结果:
依赖执行Job
- 创建三个Job文件,一个是startHDFS.job,一个是hdfs.job,一个是sleep.job
startHDFS.job:
type=command
command=/home/even/hd/hadoop-2.8.4/sbin/start-dfs.sh
sleep.job:
type=command
dependencies=startHDFS
# hdfs启动后有一段时间的安全模式,此时不可对hdfs进行操作,因此,需要定义一个睡眠时间
command=sleep 60
hdfs.job:
type=command
# 指定依赖于哪个任务
dependencies=sleep
command=/home/even/hd/hadoop-2.8.4/bin/hdfs dfs -mkdir /azkaban
-
把三个文件同时打包成zip压缩包并上传到azkaban:
-
执行流程
hdfs生成azkaban文件成功
运行Jar文件
在/home/even/hd/hadoop-2.8.4/share/hadoop/mapreduce目录下有一个hadoop-mapreduce-examples-2.8.4.jar,此Jar文件是一个WordCount程序。
- 创建wc.job文件:
type=command
command=/home/even/hd/hadoop-2.8.4/bin/hadoop jar hadoop-mapreduce-examples-2.8.4.jar wordcount /user/hive/warehouse/hive_db.db/usertable /azwc/out
其中usertable是用hive生成的一个表,内容是
2. 把wc.job和hadoop-mapreduce-examples-2.8.4.jar打包成zip压缩包。
3. 上传任务并执行,执行此Jar文件必须保证hdfs和yarn集群已启动,否则会出错无法连接的错误:
4. 结果,可通过Job List的Details查看日志:
azkaban日志
hdfs生成输出文件:
总结
Azkaban通过工作流的方式去完成一些有依赖关系的任务,从而达到自动化运行作业的目标。用户可以通过提供的Web UI创建任务。更多内容可查看官方文档。
上面例子中分别展示了,单Job运行,依赖Job运行,带文件的Job运行的例子,通过这几个例子,可以自由搭配实现自己的Job。