批量工作流任务调度器——Azkaban

1,657 阅读2分钟

Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

组件

AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。 AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

特点

兼容任何版本的hadoop

易于使用的Web用户界面

简单的工作流的上传

方便设置任务之间的关系

调度工作流

模块化和可插拔的插件机制

认证/授权(权限的工作)

能够杀死并重新启动工作流

有关失败和成功的电子邮件提醒

安装

Azkaban下载地址:azkaban.github.io/downloads.h…

Azkaban 源码: github.com/azkaban/azk…

Azkaban 插件: github.com/azkaban/azk…

Azkaban 文档: github.com/azkaban/azk…

创建

mkdir /opt/module/azkaban

安装文件

$ ls -la
total 355432
-rw-r--r--@ 1 baxiang  wheel  11157302 Jul 23 18:15 azkaban-executor-server-2.5.0.tar.gz
-rw-r--r--@ 1 baxiang  wheel      1928 Jul 23 18:14 azkaban-sql-script-2.5.0.tar.gz
-rw-r--r--@ 1 baxiang  wheel  11989669 Jul 23 18:15 azkaban-web-server-2.5.0.tar.gz

解压文件

$ tar -zxf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/
$ tar -zxf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/
$ tar -zxf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/

对解压文件重命名

$ cd /opt/module/azkaban/
$ ls -ll
total 0
drwxr-xr-x  23 baxiang  wheel  736 Aug 30 00:01 azkaban-2.5.0
drwxr-xr-x   8 baxiang  wheel  256 Aug 30 00:01 azkaban-executor-2.5.0
drwxr-xr-x   9 baxiang  wheel  288 Aug 30 00:04 azkaban-web-2.5.0
$ mv azkaban-executor-2.5.0/ executor
$ mv azkaban-web-2.5.0/ server

启动docker 版本的mysql

$ docker start mysql
mysql

登录MySQL 创建azkaban数据库

$ mycli -uroot -hlocalhost
Password:
mysql 5.7.26
mycli 1.19.0
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - www.mysqlfanboy.com
mysql root@localhost:(none)> create database azkaban;
Query OK, 1 row affected
Time: 0.002s
mysql root@localhost:(none)> use azkaban;
You are now connected to database "azkaban" as user "root"
Time: 0.001s

执行Mysql语句

mysql root@localhost:azkaban> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;
mysql root@localhost:azkaban> show tables;
+------------------------+
| Tables_in_azkaban      |
+------------------------+
| active_executing_flows |
| active_sla             |
| execution_flows        |
| execution_jobs         |
| execution_logs         |
| project_events         |
| project_files          |
| project_flows          |
| project_permissions    |
| project_properties     |
| project_versions       |
| projects               |
| properties             |
| schedules              |
| triggers               |
+------------------------+
15 rows in set
Time: 0.018s

生成密钥对和证书

$ cd server/
$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  y

Enter key password for <jetty>
	(RETURN if same as keystore password):
$ ls -ll
total 16
-rw-r--r--  1 baxiang  wheel   266 Apr 22  2014 azkaban-users.xml
-rw-r--r--  1 baxiang  wheel  1022 Apr 22  2014 azkaban.properties

vim azkaban.properties

#Azkaban Personalization Settings
#服务器UI名称,用于服务器上方显示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI颜色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#默认web server存放web文件的目录
web.resource.dir=/opt/module/azkaban/server/web/
#默认时区,已改为亚洲/上海 默认为美国
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#用户权限管理默认类(绝对路径)
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml

#Loader for projects
#global配置文件所在位置(绝对路径)
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#数据库类型
database.type=mysql
#端口号
mysql.port=3306
#数据库连接IP
mysql.host=localhost
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=baxiang
#最大连接数
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty服务器属性.
#最大线程数
jetty.maxThreads=25
#Jetty SSL端口
jetty.ssl.port=8443
#Jetty端口
jetty.port=8081
#SSL文件名(绝对路径)
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL文件密码
jetty.password=000000
#Jetty主密码与keystore文件相同
jetty.keypassword=000000
#SSL文件名(绝对路径)
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL文件密码
jetty.trustpassword=000000

# 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

vim azkaban-users.xml

<azkaban-users>
        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
        <user username="metrics" password="metrics" roles="metrics"/>
        <user username="baxiang" password="baxiang" roles="admin" groups="azkaban" />
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
</azkaban-users>

执行服务器配置修改

$ cd executor/
$ cd conf
$ vim azkaban.properties

azkaban.properties 修改内容

default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=baxiang
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

启动

 bin baxiang$ ./azkaban-executor-start.sh
 bin baxiang$ ./azkaban-web-start.sh

ui界面:https://localhost:8443 注意是https