上一节我们概述了工作流调度任务知识和管理工具等。包括crontab命令、Oozie、Azkaban、Airflow、DolphinScheduler框架等。
这节我们详细讲解目前市场上使用比较多的工作流任务调用管理工具AzKaban。
一、Azkaban架构

AzKabanWebServer
AzkabanWebServer是整个Azkaban工作流系统的主要管理者,包括用户登录认证、project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。
AzKabanExecutorServer 负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。 MySQL 存储大部分执行流状态,WebServer和ExecutorServer都需要访问数据库。
2、架构部署
我们根据集群的配置情况做如下部署:
node节点都是hadoop3.0平台
组件 | Node01 | Node02 | Node03 |
AzkabanWebServer | √ | ||
AzkabanExecutorServer | √ | √ | √ |
mysql | √ |

二、Azkaban源码编译
Azkaban source code
git
jdk
gradle

这里我们下载最近的latest4.0.0版本源码。


sudo yum install -y git
gradle官网下载,这里我自己有6.6这个版本。

上传到hadoop-node01机器上。目录如下:

./gradlew build


# Build Azkaban./gradlew build# Clean the build./gradlew clean# Build and install distributions./gradlew installDist# Run tests./gradlew test# Build without running tests./gradlew build -x test
下面我们拿之前编译好的的3.8.4这个版本,继续讲解。

三、mysql安装搭建
mysql> create database azkaban;
#设置密码策略等级低模式以及长度set global validate_password_length=6set global validate_password_policy=0#创建azkaban用户,并设置密码CREATE USER 'azkaban'@'%' IDENTIFIED BY 'XXXXXX';#赋予用户权限GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
3、导入azkaban表
我们刚才上传azkaban-db的路径是/opt/module/azkaban
里面包含一个创建所有SQL的脚本

mysql> source /opt/module/azkaban/azkaban-db/create-all-sql-3.84.4.sql
mysql> show tables;+-----------------------------+| Tables_in_azkaban |+-----------------------------+| QRTZ_BLOB_TRIGGERS || QRTZ_CALENDARS || QRTZ_CRON_TRIGGERS || QRTZ_FIRED_TRIGGERS || QRTZ_JOB_DETAILS || QRTZ_LOCKS || QRTZ_PAUSED_TRIGGER_GRPS || QRTZ_SCHEDULER_STATE || QRTZ_SIMPLE_TRIGGERS || QRTZ_SIMPROP_TRIGGERS || QRTZ_TRIGGERS || active_executing_flows || active_sla || execution_dependencies || execution_flows || execution_jobs || execution_logs || executor_events || executors || project_events || project_files || project_flow_files || project_flows || project_permissions || project_properties || project_versions || projects || properties || ramp || ramp_dependency || ramp_exceptional_flow_items || ramp_exceptional_job_items || ramp_items || triggers || validated_dependencies |+-----------------------------+35 rows in set (0.00 sec)
[qiusheng@node01 azkaban]$ sudo vim /etc/my.cnf[mysqld]21 # Azkaban packet22 max_allowed_packet=1024M
[qiusheng@node01 azkaban]$ sudo systemctl restart mysqld
四、AzKabanExecutorServer配置
#1、修改时区7 #default.timezone.id=America/Los_Angeles8 default.timezone.id=Asia/Shanghai#2、修改webserver.url22 #azkaban.webserver.url=http://localhost:808123 azkaban.webserver.url=http://node01:8081#3、修改mysql的host等46 #mysql.host=localhost47 mysql.host=node01#4、添加metric属性55 executor.metric.reports=true56 executor.metric.milisecinterval.default=60000#5、添加executor.port57 #add azkan Executor port58 executor.port=12333
[qiusheng@node01 azkaban-exec]$ xsync__nodes.sh opt/module/azkaban/azkaban-exec/=============== node01 ===============sending incremental file listsent 1,937 bytes received 23 bytes 3,920.00 bytes/sectotal size is 17,750,582 speedup is 9,056.42=============== node02 ===============sending incremental file listsent 17,759,162 bytes received 1,154 bytes 35,520,632.00 bytes/sectotal size is 17,750,582 speedup is 1.00=============== node03 ===============sending incremental file listsent 17,759,162 bytes received 1,154 bytes 11,840,210.67 bytes/sectotal size is 17,750,582 speedup is 1.00
[qiusheng@node01 azkaban-exec]$ bin/start-exec.sh

executor.port
12333是我们前面配置azkaban.properties中executor.port的值
[qiusheng@node01 azkaban-exec]$ cat executor.port12333
currentpid
10652是AzkabanExecutorServer进程id
[qiusheng@node01 azkaban-exec]$ jps10652 AzkabanExecutorServer10733 Jps
mysql> select * from executors;+----+--------+-------+--------+| id | host | port | active |+----+--------+-------+--------+| 1 | node01 | 12333 | 0 |+----+--------+-------+--------+1 row in set (0.00 sec
[qiusheng@node01 azkaban-exec]$ curl -G "node01:12333/executor?action=activate" && echo{"status":"success"}
返回激活的响应码
返回success;
在数据库表中查看是否激活
active字段显示1
mysql> select * from executors;+----+--------+-------+--------+| id | host | port | active |+----+--------+-------+--------+| 1 | node01 | 12333 | 1 |+----+--------+-------+--------+1 row in set (0.00 sec)
[qiusheng@node02 azkaban-exec]$ bin/start-exec.sh[qiusheng@node01 azkaban-exec]$ curl -G "node02:12333/executor?action=activate" && echo{"status":"success"}
[qiusheng@node03 azkaban-exec]$ bin/start-exec.sh[qiusheng@node01 azkaban-exec]$ curl -G "node03:12333/executor?action=activate" && echo{"status":"success"}
mysql> select * from executors;+----+--------+-------+--------+| id | host | port | active |+----+--------+-------+--------+| 1 | node01 | 12333 | 1 || 2 | node02 | 12333 | 1 || 3 | node03 | 12333 | 1 |+----+--------+-------+--------+3 rows in set (0.00 sec)
五、AzKabanWebServer配置
#1、修改时区7 #default.timezone.id=America/Los_Angeles8 default.timezone.id=Asia/Shanghai#2、修改mysql的host等46 #mysql.host=localhost47 mysql.host=node01
49 azkaban.use.multiple.executors=true50 azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
三个参数值分别是:StaticRemainingFlowSize、MinimumFreeMemory
CpuStatus,由于MinimumFreeMemory至少需要节点6G以上的内存。我们集群资源不满足这个条件,故删除它。
azkaban-web/conf/azkaban-users.xml
<azkaban-users><user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/><user password="metrics" roles="metrics" username="metrics"/><user password="tigerWang" roles="admin" username="tigerWang"/><role name="admin" permissions="ADMIN"/><role name="metrics" permissions="METRICS"/></azkaban-users>
[qiusheng@node01 bin]$ ./start-web.sh
我们先启动Hadoop集群,包括Kafka集群、Zookeeper集群.

然后三台节点都启动AzKabanExecutorServer、最后在Node01节点在启动AzKabanWebServer服务。
Node01节点进程
[qiusheng@node01 azkaban-web]$ jps11248 NodeManager12402 Jps11510 QuorumPeerMain11944 Kafka11385 JobHistoryServer10890 DataNode12266 AzkabanExecutorServer10763 NameNode12060 Application12381 AzkabanWebServer
Node02节点进程
[qiusheng@node02 azkaban-exec]$ jps12336 AzkabanExecutorServer11633 QuorumPeerMain11218 NodeManager11091 ResourceManager10886 DataNode12040 Kafka12155 Application12447 Jps
Node03节点进程
[qiusheng@node03 azkaban-exec]$ jps12649 Application12985 Jps11978 NodeManager12154 QuorumPeerMain12554 Kafka11757 DataNode11839 SecondaryNameNode12847 AzkabanExecutorServer
访问http://node01:8081,并用"tigerWang"用户登陆

登录成功后,界面如下:

到这我们就完成了整个AzKaban集群架构的部署了。
总结:
AzKaban架构原理、组件、部署;
mysql部署;
AzKabanExecutorServer部署;
AzKabanWebServer部署;
验证测试集群部署。




