Azkaban
是由Linkedin公司推出的⼀个批量⼯作流任务调度器,主要⽤于在⼀个⼯作流内以⼀个特定的顺序运⾏⼀组⼯作和流程,它的配置是通过简单的key:value对的⽅式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是⽆环的,否则会被视为⽆效的⼯作流。Azkaban使⽤job配置⽂件建⽴任务之间的依赖关系,并提供⼀个易于使⽤的web⽤户界⾯维护和跟踪你的⼯作流。zkaban的设计⾸先考虑了可⽤性。它已经在LinkedIn上运⾏了⼏年,并驱动了许多Hadoop和数据仓库流程。
知名度⽐较⾼的应该是 Apache Oozie
,但是其配置⼯作流的过程是编写⼤量的XML配置,⽽且代码复杂度⽐较⾼,不易于⼆次开发。另外⼀个应⽤也⽐较⼴泛的调度系统是 Airflow
,但是其开发语⾔是
Python。
选择Azkaban的理由:
- 提供功能清晰,简单易⽤的Web UI界⾯
- 提供job配置⽂件快速建⽴任务和任务之间的依赖关系
- 提供模块化和可插拔的插件机制,原⽣⽀持command、Java、Hive、Pig、Hadoop
- 基于Java开发,代码结构清晰,易于⼆次开发
Azkaban
在LinkedIn
上实施,以解决Hadoop作业依赖问题。我们有⼯作需要按顺序运⾏,从ETL⼯作到数据分析产品。最初是单⼀服务器解决⽅案,随着多年来Hadoop⽤户数量的增加,Azkaban 已经发展成为⼀个更强⼤的解决⽅案。Azkaban总共有三个⻆⾊:关系型数据库(MySQL)
、AzkabanWebServer
、AzkabanExecutorServer
。
Azkaban使⽤MySQL存储服务状AzkabanWebServerAzkabanExecutorServer都需要访问MySQL的DB数据库
- 参考资料: https://azkaban.github.io/azkaban/docs/latest/
AzkabanWebServer
是所有Azkaban的主要管理器。它处理项⽬管理,身份验证,调度程序和执⾏监视。它还⽤作Web⽤户界⾯,使得 使⽤Azkaban很容易。在
version 3.0
中我们提供了三种模式:独⽴的"solo-server"
模式、较重的"two server"
模式以及"multipleexecutor"
模式。
- 其中
solo server mode
使⽤的内嵌的H2 DB
,所有的web server和executor server运⾏在⼀个相同的进程中,该种模式适合测试或者任务调度规模⽐较⼩;two server mode
⽤于⽣产环境,后台的DB数据库使⽤MySQL
,其中Webserver和executorserver应该被部署在不同的主机上;- multiple executor mode 也通常⽤于⽣产环境,后台的DB数据库使⽤MySQL,其中Webserver和executorservers应该被部署在不同的主机上;
编译软件
(推荐不要自己执行,亦可省略,直接开始②)[root@pro1~] yum install git
[root@pro1~] git clone https://github.com/azkaban/azkaban.git
[root@pro1~] cd azkaban/
[root@pro1azkaban] ./gradlew build installDist
由于编译时间过长(可能几个小时),这里附上已编译好的安装包
https://pan.baidu.com/s/1AI7QBfyMDDAxJ3V5x_TkDQ 提取码:gvcc
安装单机
获取编译完成后安装目录下的 azkaban-solo-server-*.tar.gz
,进行解压。
tar
包,可以不再使用①中的初始安装包。执行如下命令:
[root@pro1 azkaban] tar -zxf azkaban-solo-server/build/distributions/azkaban-soloserver-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 azkaban] cd /usr/
[root@pro1 usr] mv azkaban-solo-server-3.81.0-1-g304593d azkaban-solo-server
修改 azkaban.properties 配置⽂件
进入conf目录,执行如下命令
default.timezone.id=Asia/Shanghai #修改时区
jetty.port=8082 #配置azkabanweb服务器地址,避免与单机环境下的 flink冲突
修改commonprivate.properties配置⽂件
[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties
修改如下配置
memCheck.enabled=false #关闭执⾏节点内存检查,默认如果执⾏节点内存⼩于6GB,不会提交任务
启动
[root@pro1 azkaban-solo-server] ./bin/start-solo.sh #启动
[root@pro1 azkaban-solo-server] jps
5638 AzkabanSingleServer
5679 Jps
测试
访问 端口: 8082 (对应③中配置的端口位置
)
username : azkaban
password: azkaban
关于测试的方法,一致放在 集群模式下 展示。
关闭
[root@pro1 azkaban-solo-server] ./bin/shutdown-solo.sh
Killing solo-server. [pid: 18912], attempt: 1
shutdown succeeded
安装配置MySQL
准备好特定sql 文件
: https://pan.baidu.com/s/1FpbFxbnhr65cBPZxuuhSFQ 获取码:lsgv# 创建库
mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)
# 查看库
mysql> show create database azkaban;
+----------+--------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------+
| azkaban | CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
#使用库
mysql> use azkaban;
Database changed
# 加载sql文件
mysql> source /root/create-all-sql-3.81.0-1-g304593d.sql
Query OK, 0 rows affected (0.00 sec)
...
Query OK, 0 rows affected (0.00 sec)
#有34个表才是成功
mysql> show tables;
.
.
34 rows in set (0.00 sec)
在所有集群节点上
)安装包获取:https://pan.baidu.com/s/1lztuUl1-o_X_bd6EtlWU0A 获取码:zih8
执行如下命令:
[root@pro2 ~] tar -zxf azkaban-exec-server-3.81.0-1-g304593d.tar.gz -C /usr/zylsoft/
[root@pro2 ~] cd /usr/zylsoft/
[root@pro2 zylsoft] mv azkaban-exec-server-3.81.0-1-g304593d/ azkaban-exec-server
[root@pro2 zylsoft] cd azkaban-exec-server/
[root@pro2 azkaban-exec-server] vim conf/azkaban.properties
配置以下内容
# Azkaban Personalization Settings
# 改时区
default.timezone.id=Asia/Shanghai
# 改ip、端口
# Azkaban Jetty server properties.
jetty.port=8082
# Where the Azkaban web server is located
# 改IP、端口
azkaban.webserver.url=http://pro1:8082
# mail settings
mail.sender= #你的邮箱地址
mail.host=smtp.qq.com #邮箱类型
mail.user= #你的邮箱地址
mail.password= #邮箱的授权码|密码
# 任务调度成功&失败的发送邮箱
job.failure.email= #你的邮箱地址
job.success.email= #你的邮箱地址
jetty.ssl.port) are used.
#修改 mysql配置
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=pro1
sql.database=azkaban
mysql.user=root
mysql.password=000
进入此文件中
[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties
修改:
memCheck.enabled=false #关闭内存检查
[root@pro2 azkaban-exec-server] ./bin/start-exec.sh
[root@pro2 azkaban-exec-server] jps
1635 Jps
1620 AzkabanExecutorServer
激活azkaban执⾏服务器(每次重启,都需要激活)
[root@pro2 azkaban-exec-server] curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
{“status”:“success”}
显示此状态表示启动成功
软件获取包: https://pan.baidu.com/s/1j8ymmfN9uX1GfSTzcHp1Sw 获取码:vhar
[root@pro1 ~] tar -zxf azkaban-web-server-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 ~] mv /usr/azkaban-web-server-3.81.0-1-g304593d/ /usr/azkaban-webserver/
[root@pro1 azkaban-web-server] vi conf/azkaban.properties
修改以下配置:
# Azkaban Personalization Settings
# 修改时区
default.timezone.id=Asia/Shanghai
# Azkaban Jetty server properties.
# 修改端口
jetty.port=8082
# mail settings
mail.sender=********@qq.com
mail.host=smtp.qq.com
mail.user=********@qq.comail.password=邮箱的授权码|密码
# 任务调度成功&失败的发送邮箱
job.failure.email=********@qq.com
job.success.email=********@qq.com
# Azkaban mysql settings by default. Users should configure their own username and password.
# 修改MySQL配置
database.type=mysql
mysql.port=3306
mysql.host=pro1
mysql.database=azkaban
mysql.user=root
mysql.password=000
mysql.numconnections=100
#Multiple Executor
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
#关闭对执行服务器的内存检查-测试环境才需要关闭
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
[root@pro1 azkaban-web-server] ./bin/start-web.sh
#停止指令
[root@pro1 azkaban-web-server] ./bin/shutdown-web.sh
访问 8082端口 ,与 ③-2中配置的端口一致
username : azkaban
password: azkaban
参考 https://blog.csdn.net/weixin_38231448/article/details/103847194
Flow1.0
type=command
command=echo ‘Hello Azkaban!’
将以上⽂件打包成zip包然后上传!
Flow 2.0
1、创建xxx.project⽂件
azkaban-flow-version: 2.0
2.创建⼀个xxx.flow
nodes:
- name: jobA
type: command
config:
command: echo "This is an echoed text."
将以上⽂件打包成zip包然后上传!
5种测试标准zip包获取:
https://pan.baidu.com/s/1rcT3N5ALhtZ-AY7m76yKRQ 获取码:z2q3
ex-1 echo命令
ex-2 shell脚本
ex-3 java代码
ex-4 多个⽆关job-并⾏
(文件名可能有误,打开后请自行修改)
ex-5 内嵌流
(文件名可能有误,打开后请自行修改)
补充
配置邮件服务示例:
---
config:
user.to.proxy: root
failure.emails: [email protected],[email protected]
success.emails: [email protected],[email protected]
notify.emails: [email protected],[email protected]
nodes:
- name: job01
type: command
config:
command: sh ./demo08/bin/hdfs.sh