目录
一、Azkaban简介
Azkaban是什么有啥用
Azkaban的功能特点
二、Azkaban搭建
三、Azkaban使用
单个独立任务
多个任务工作流
一、Azkaban简介
Azkaban是什么有啥用
- Azkaban是一套简单的任务调度服务,整体包括三部分webserver、dbserver、executorserver。
- Azkaban是由Linkedin开源的一个Java项目,批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
- Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban的功能特点
- Web用户界面
- 方便上传工作流
- 方便设置任务之间的关系
- 工作流调度
- 认证/授权
- 能够杀死并重启工作流
- 模块化和可插拔的插件机制
- 项目工作区
- 工作流和任务的日志记录和审计
二、Azkaban搭建
上传安装包至node001节点:
解压
tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/azkaban
tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/azkaban/
tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/azkaban/
改名
mv /opt/azkaban/azkaban-executor-2.5.0/ /opt/azkaban/executor
mv /opt/azkaban/azkaban-web-2.5.0/ /opt/azkaban/web
mv /opt/azkaban/azkaban-2.5.0/ /opt/azkaban/sql
环境变量配置
终端输入:vim /etc/profile
末行加入
export EXECUTOR_HOME=/opt/azkaban/executor
export PATH=$PATH:$EXECUTOR_HOME/bin
export WEB_HOME=/opt/azkaban/web
export PATH=$PATH:$WEB_HOME/bin
重新加载配置文件:source /etc/profile
登录mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> create database azkaban; # 创建azkaban数据库
Query OK, 1 row affected (0.00 sec)
mysql> use azkaban; # 使用zakaban数据库
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> source /opt/azkaban/sql/create-all-sql-2.5.0.sql # 初始化,创建默认表
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
mysql> 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 (0.00 sec)
mysql> exit;
Bye
[root@node001 azkaban]#
配置jetty
- Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。 它们的实现都遵循Java Servlet规范,相对Tomcat而言Jetty更轻量级、更灵活。总的来说,Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。
- jetty已经内嵌到azkaban中。只需通过命令配置,不需要下载安装。
终端输入:keytool -keystore keystore -alias jetty -genkey -keyalg RSA
[root@node001 conf]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password: # azkaban
Re-enter new password: # azkaban
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 # y
Enter key password for <jetty>
(RETURN if same as keystore password): # azkaban
Re-enter new password: # azkaban
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".
azkaban.properties配置文件
终端输入:vim /opt/azkaban/web/conf/azkaban.properties
#Azkaban Personalization Settings
# 服务器名称,用于服务器上方显示名称
azkaban.name=Test
# 描述信息
azkaban.label=My Local Azkaban
# 颜色配置
azkaban.color=#FF3601
# 默认servlet路径
azkaban.default.servlet.path=/index
# 修改为绝对地址,不然web页面没有js效果
web.resource.dir=/opt/azkaban/web/web
# 修改时区为自己本地时区
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
# 用户权限管理默认类
user.manager.class=azkaban.user.XmlUserManager
# 修改为绝对地址
user.manager.xml.file=/opt/azkaban/web/conf/azkaban-users.xml
#Loader for projects
# global配置文件所在地址
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
# mysql端口号
mysql.port=3306
# 部署mysql的节点地址
mysql.host=192.168.1.101
# mysql 使用上文创建的azkaban数据库
mysql.database=azkaban
# mysql 用户名
mysql.user=root
# mysql 密码
mysql.password=root
# mysql 最大连接数
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
# 修改为绝对地址
jetty.keystore=/opt/azkaban/web/keystore
# 上文使用keytool -keystore keystore -alias jetty -genkey -keyalg RSA命令时自己输入的密码
jetty.password=azkaban
jetty.keypassword=azkaban
# 修改为绝对地址
jetty.truststore=/opt/azkaban/web/keystore
jetty.trustpassword=azkaban
# 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-users.xml配置
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
# 如下添加的是自定义用户,相当于注册的功能,将可以使用此username和password登录web页面
<user username="libing" password="libing" roles="admin, metrics"/>
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
启动azkaban web server
终端输入:azkaban-web-start.sh
web页面
配置Azkaban Executor Server
进入Executor 的conf目录:cd /opt/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=/opt/azkaban/executor/conf/global.properties
azkaban.project.dir=projects
# 主要就修改mysql用户名和密码
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.101
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
启动Executor
azkaban-executor-start.sh
三、Azkaban使用
- projects:最重要的部分,创建一个工程,所有flows将在工程中运行。
- scheduling: 显示定时任务
- executing: 显示当前运行的任务
- history: 显示历史运行任务
单个独立任务
1. 创建project
2. 定义一个job
任务如何执行,任务具体做什么是在job文件中定义
# 本地新建一个command.job文件,文件中的内容末尾不要有空格,内容如下:
# command.job
type=command
command=mkdir /opt/test_azkaban
3.将job定义文件打包成zip包
4. upload任务压缩包至项目
上传后,如果想看job的内容是什么,可以在job command中可以查看解析出任务内容
5. 查看任务,执行任务
点击Flows中 command任务,可以进入到任务的具体界面,Execute Flow 可以执行任务
成功生成了对应文件
多个任务工作流
定义job任务
文件one.jop内容如下
# one.job
type=command
command=mkdir /opt/one
文件two.jop内容如下
# two.job
type=command
# dependencies=one 意思是two这个job任务,依赖one这个任务,定义了这个参数,则意味着他们是先后执行,two需要one执行完成后再执行
dependencies=one
command=touch /opt/one/two.txt
将job定义文件打包成zip包
依照上文将压缩包上传至项目中
执行任务