一、Azkaban的简介
1、简介
Azkaban是由Linkedin开源的一个批量工作流(WorkFlow)任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban具有如下功能特点:
- Web用户界面
- 方便上传工作流
- 方便设置任务之间的关系
- 调度工作流
- 认证/授权(权限设置)
- 能够杀死并重新启动工作流
- 模块化和插件化
- 项目工作区
简单归纳:
- Azkaban是一个工作流引擎,主要是解决作业的依赖关系,从ETL到数据分析。同时也可以解决依赖关系的DAG(有限无环图)。
- Azkaban是一个任务调度器,比如一个shell脚本A可以分为B、C、D、E等4个子任务来执行完成。
2、Azkaban的核心组件
Azkaban完成一个作业调度,需要3个核心组件协作。
- 关系型数据库(MySQL)
存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。 - Web服务器:
AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。 - 执行服务器
负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。
3、Azkaban的执行工作步骤
(1)自定义工作流程(WorkFlow),形成配置文件
(2)在Web界面上传工作流程(WorkFlow)文件(上传之后这些文件会存在mysql中)
(3)当执行工作流程(WorkFlow)时,会形成请求并把请求发给Azkaban Executor Server
(4)Executor从MySQL读取相应的工作流程(WorkFlow)配置文件
(5)读取后,Executor会下载工作流,并不断把状态等信息存进MySQL ,Web Server从Mysql中读取信息并展示
二、Azkaban的安装部署
1、安装部署前先配置mysql
前提条件是已经安装了mysql以及相关配置
(1)使用root账号登录mysql,创建mysql用户“azkaban”
mysql> grant all on *.* to azkaban@'%' identified by 'azkaban';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to azkaban@'master' identified by 'azkaban';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to azkaban@'localhost' identified by 'azkaban';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
mysql>
(2)使用新建账号“azkaban”登录,并创建一个名称为azkaban_db的数据库
mysql> create database azkaban_db;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| azkaban_db |
| hive_db |
| hive_meta |
| mysql |
| performance_schema |
| test |
+--------------------+
7 rows in set (0.01 sec)
mysql>
2、把安装包上传到linux
3、解压安装
输入命令开始解压,解压后得到文件夹azkaban-2.5.0
[admin@master ~]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz
切换至azkaban-2.5.0目录,可以查看到所有的.sql文件
4、在新建的azkaban_db库中执行create-all-sql-2.5.0.sql
(1)切换到mysql的azkaban_db库中的命令界面,使用source命令执行.sql文件。
注:source命令是mysql专门用于执行.sql文件的命令
mysql> use azkaban_db
Database changed
mysql> source /home/admin/azkaban-2.5.0/create-all-sql-2.5.0.sql
(2)执行完毕后,会自动生成一些Web Server和Executor Server的一些表
5、配置Azkaban Web Server
(1)解压安装azkaban-web-server-2.5.0.tar.gz
注:如果.zip文件,使用unzip命令,unzip是linux系统解压zip文件的命令。
[admin@master ~]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz
(2)把mysql驱动mysql-connector-java-5.1.28.jar拷贝到azkaban-web-2.5.0的extlib目录下
[admin@master ~]$ cd azkaban-web-2.5.0
[admin@master azkaban-web-2.5.0]$ ls
azkaban.version bin conf extlib lib plugins web
[admin@master azkaban-web-2.5.0]$ cd extlib
[admin@master extlib]$ ll
总用量 0
[admin@master extlib]$ cp /home/admin/mysql-connector-java-5.1.28.jar ./
[admin@master extlib]$ ls
mysql-connector-java-5.1.28.jar
[admin@master extlib]$
(3)配置jetty
Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。 它们的实现都遵循Java Servlet规范,相对Tomcat而言Jetty更轻量级、更灵活。总的来说,Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。
jetty已经内嵌到azkaban中。只需通过命令配置,不需要下载安装。
[admin@master ~]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
(4)修改azkaban-web-2.5.0目录下conf下的azkaban.properties
[admin@master ~]$ cd azkaban-web-2.5.0
[admin@master azkaban-web-2.5.0]$ ll
总用量 8
-rw-r--r--. 1 admin admin 105 4月 22 2014 azkaban.version
drwxr-xr-x. 2 admin admin 112 4月 22 2014 bin
drwxr-xr-x. 2 admin admin 57 5月 16 23:19 conf
drwxr-xr-x. 2 admin admin 45 5月 16 23:25 extlib
drwxr-xr-x. 2 admin admin 4096 5月 16 23:19 lib
drwxr-xr-x. 2 admin admin 6 4月 22 2014 plugins
drwxr-xr-x. 6 admin admin 73 5月 16 23:19 web
[admin@master azkaban-web-2.5.0]$ cd conf
[admin@master conf]$ ls
azkaban.properties azkaban-users.xml
[admin@master conf]$ vim azkaban.properties
#Azkaban Personalization Settings
#服务器名称,用于服务器上方显示名称
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#颜色
azkaban.color=#FF3601
#默认servlet路径
azkaban.default.servlet.path=/index
#默认web根目录
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
#global配置文件所在位置
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
#数据库类型
database.type=mysql
#数据库端口号
mysql.port=3306
#数据库连接IP
mysql.host=master
#数据库库名
mysql.database=azkaban_db
#数据库账号密码
mysql.user=azkaban
mysql.password=azkaban
#最大连接数
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
#最大线程数
jetty.maxThreads=25
#jetty ssh端口
jetty.ssl.port=8443
#jetty端口
jetty.port=8081
#ssl文件名
jetty.keystore=keystore
#ssl文件密码
jetty.password=123456
#jetty主密码,与keystore文件密码相同
jetty.keypassword=123456
#ssl文件名
jetty.truststore=keystore
#ssl文件密码
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
(5)完成上述配置后,会自动将当前目录生成keystore证书文件放在/home/admin目录中,然后将keystore拷贝到azkaban web server的根目录中
[admin@master ~]$ cp ./keystore ~/azkaban-web-2.5.0
6、配置Azkaban Executor Server
(1)解压安装
[admin@master ~]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz
(2)进入conf目录,配置azkaban.properties
[admin@master ~]$ cd azkaban-executor-2.5.0
[admin@master azkaban-executor-2.5.0]$ ls
azkaban.version bin conf extlib lib plugins
[admin@master azkaban-executor-2.5.0]$ cd conf
[admin@master conf]$ ls
azkaban.private.properties azkaban.properties global.properties
[admin@master conf]$ vim azkaban.properties
7、创建一个azkaban web账号
创建一个azkaban web账号,用于登录前端web界面。
(1)进入azkaban web server的conf目录,修改azkaban-users.xml。
[admin@master ~]$ cd azkaban-web-2.5.0
[admin@master azkaban-web-2.5.0]$ ls
azkaban.version bin conf extlib lib plugins web
[admin@master azkaban-web-2.5.0]$ cd conf
[admin@master conf]$ ls
azkaban.properties azkaban-users.xml
[admin@master conf]$ vim azkaban-users.xml
(2)创建一个用于登录web的用户admin,并且赋予admin、metrics双重角色。
8、启动azkaban web server
(1)进入bin目录
[admin@master ~]$ cd azkaban-web-2.5.0
[admin@master azkaban-web-2.5.0]$ ls
azkaban.version bin conf extlib lib plugins web
[admin@master azkaban-web-2.5.0]$ cd bin
[admin@master bin]$ ls
azkaban-web-shutdown.sh azkaban-web-start.sh schedule2trigger.sh start-web.sh
[admin@master bin]$
(2)当看到绿色说明有执行权限。当白色时则说明无执行权限。可以在当前目录输入命令:chmod 777 ./* 赋予权限。
(3)开始启动。返回azkaban-web-2.5.0根目录,执行azkaban-web-start.sh
[admin@master azkaban-web-2.5.0]$ bin/azkaban-web-start.sh
9、登录azkaban web
(1)浏览器输入 https://master:8443/ 登录azkaban web界面
10、启动azkaban executor server
(1)启动之前,查看下进程。可以看到azkaban web server已经正常启动。
(2)启动execytor与启动web类似。进入到bin目录下
[admin@master ~]$ cd azkaban-executor-2.5.0/
[admin@master azkaban-executor-2.5.0]$ ls
azkaban.version bin conf extlib lib plugins
[admin@master azkaban-executor-2.5.0]$ cd bin
[admin@master bin]$ ls
azkaban-executor-shutdown.sh azkaban-executor-start.sh start-exec.sh
[admin@master bin]$
(3)返回azkaban-executor-2.5.0根目录,执行azkaban-executor-start.sh
[admin@master azkaban-executor-2.5.0]$ bin/azkaban-executor-start.sh
(4)查看进程