Azkaban入门篇

Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

Azkaban入门篇_第1张图片

在介绍Azkaban之前,我们先来看一下现有的两个工作流任务调度系统。知名度比较高的应该是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。另外一个应用也比较广泛的调度系统是Airflow,但是其开发语言是Python。由于我们团队内部使用Java作为主流开发语言,所以选型的时候就被淘汰掉了。我们选择Azkaban的原因基于以下几点:

  • 提供功能清晰,简单易用的Web UI界面
  • 提供job配置文件快速建立任务和任务之间的依赖关系
  • 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
  • 基于Java开发,代码结构清晰,易于二次开发

1、Azkaban的安装

Azkaban有两种部署方式:solo server mode 和 cluster server mode。

  • solo server mode(单机模式):该模式中webServer和executorServer运行在同一个进程中,进程名是AzkabanSingleServer。可以使用自带的H2数据库或者配置mysql数据。该模式适用于小规模的使用。 
  • cluster server mode(集群模式):该模式使用MySQL数据库,webServer和executorServer运行在不同进程中,该模式适用于大规模应用。

Azkaban的组成如下:

Azkaban入门篇_第2张图片

其实在单机模式中,AzkabanSingleServer进程只是把AzkabanWebServer和AzkabanExecutorServer合到一起启动而已。

下面介绍单机版的安装过程。

(1)下载Azkaban

下载地址:azkaban.github.io/downl

官网提供的压缩包是Azkaban2.5版本的,但是最新的版本是3.0。如果需要使用3.0版本,只需要到github上下载源码后编译即可。github地址是:GitHub - azkaban/azkaban: Azkaban workflow manager.

(2)解压安装包

下载后的安装包是:azkaban-solo-server-x.x.x.tar.gz,解压后的主要目录如下所示:

bin:包含启动和停止的脚本

conf:配置文件目录

data:默认自带数据库H2的数据目录

executions:每个执行的工作流都会生成一个对应的文件夹,放在该目录下

extlib:第三方扩展包

lib:依赖的jar包

logs:执行日志

plugins:可拔插的插件包

projects:用户上传的压缩包所在目录

sql:运行所需要的mysql表的建表语句

web:前端展示界面对应的HTML/CSS/JS文件

(3)数据库安装配置

MySQL安装过程(略)

进入MySQL命令行后,创建数据库:

  • CREATE DATABASE azkaban;

创建用户名和密码:

  • CREATE USER 'username'@'%' IDENTIFIED BY 'password';

给用户授权:

  • GRANT SELECT,INSERT,UPDATE,DELETE ON .* to ''@'%' WITH GRANT OPTION;

导入下载包azkaban-sql-script-x.x.x.tar.gz中脚本“create.all.sql”

  • SOURCE create.all.sql;

检查下载包web和executor的lib文件下是否有mysql驱动,若不存在,则拷贝一个。

(4)修改配置文件conf/azkaban.properties(以下为可修改部分,其他默认即可)

#设置项目主标题

azkaban.name=Local

#设置项目副标题

azkaban.label=My Local Azkaban

#设置为上海时间(东八区),否则会按美国时间执行

default.timezone.id=Asia/Shanghai

#注释掉默认的H2数据库配置后,配置MySQL数据库

database.check.version=false

database.type=mysql

mysql.port=3306

mysql.host=192.168.0.1

mysql.database=azkaban

mysql.user=username

mysql.password=password

mysql.numconnections=100

#配置禁用Jetty服务器

jetty.use.ssl=false

jetty.ssl.port=8043

jetty.maxThreads=25

jetty.port=8081

#配置告警邮件

[email protected]

mail.host=smtp.163.com

mail.user=mailUsername

mail.password=mailPassword

#配置azkaban web url

azkaban.webserver.url=http://azkaban.xxx.com/

(5)配置plugin插件

在官网下载azkaban-jobtype-x.x.x.tar.gz文件,解压到azkaban安装目录下的plugin目录下,并重命名为jobtypes目录,然后配置commonprivate.properties文件如下:

jobtype.global.classpath=本地hadoop的config文件和lib文件

hadoop.classpath=同上

#配置各个组件的home

hadoop.home=/home/hadoop/hadoop-2.6.0-cdh5.5.0

pig.home=/home/hadoop/azkaban/plugins/jobtypes/pig

hive.home=/home/hadoop/hive-1.1.0-cdh5.5.0

spark.home=/home/hadoop/spark-1.6.0-bin-hadoop2.6

azkaban.home=/home/hadoop/azkaban/azkaban-solo-server-3.0.0

(6)启动与关闭

启动命令:

  • ./bin/azkaban-solo-start.sh

关闭命令:

  • ./bin/azkaban-solo-shutdown.sh

至此,Azkaban的单机版安装完成,在浏览器中访问:hostname:8081就可以看到Azkaban的UI界面啦!

2、Azkaban界面功能说明

Azkaban主界面中四个标签页,分别对应了它的四大功能模块:

  • Projects:每个独立的Flows都对应一个Projects,Flows将在Projects中运行
  • Scheduling:显示定时执行任务
  • Executing:显示正在执行的任务
  • History:显示历史执行任务

由于Projects模块涉及的功能比较多,下面重点介绍一下。点击进入一个Project后,如下:

Azkaban入门篇_第3张图片

界面右上角的三个按钮分别可以删除、上传、下载Project,我们编写完成并打包的zip文件,就是在这里上传的。界面中的三个标签页功能如下:

  • Flows:工作流程,由多个job组成,点击还可以进入图表界面
Azkaban入门篇_第4张图片

选择任意一个job节点,右键点击“Open Job...”可以看到该节点的配置参数,可编辑

Azkaban入门篇_第5张图片
  • Permissions:用于权限管理
  • Project Logs:工程日志

点击Execute Flow按钮开始执行工作流,弹出界面如下:

Azkaban入门篇_第6张图片
  • Flow View:该界面右边的流程图中的每个节点,都可以Disable和Enable
Azkaban入门篇_第7张图片
  • Notification:可以配置成功或失败时是否发出邮件。
  • Failure Options:当任务流执行失败是选择处理策略,默认是仅完成当前运行的job
  • Concurrent:并行任务执行设置
  • Flow Parameters:设置执行的参数,用于覆盖全局设置的参数

最后点击Execute按钮即可执行。执行完成的效果如下:

Azkaban入门篇_第8张图片

每个执行成功的节点是绿色表示,如果执行失败,则用红色表示。

3、一个简单的例子

下面通过一个列子讲解Azkaban的开发流程。

(1)新建一个文件夹,在文件夹下创建两个文件hello1.job和hello2.job,内容如下:

hello1.job:

type=command

command=echo “this is hello1 job”

hello2.job:

type=command

command=echo “this is hello2 job”

dependencies=hello1

(2)把两个文件打包成hello.zip文件

(3)新建一个Azkaban工程:Hello,并上传hello.zip压缩文件

Azkaban入门篇_第9张图片

(4)上传成功后,可以在界面分别看到两个节点

Azkaban入门篇_第10张图片

(5)执行并查看输出

Azkaban入门篇_第11张图片

(6)点击Details,查看具体日志

Azkaban入门篇_第12张图片

(7)在history界面中可以查看到执行完成的任务:

Azkaban入门篇_第13张图片

至此,一个完整的任务从开发到执行完成。

你可能感兴趣的:(Azkaban)