azkaban 使用手册
📄字数 8.7K
👁️阅读量 加载中...
azkaban 是一个分布式工作流管理器,用于解决 Hadoop 作业依赖问题。在 v3.0 版本中,提供了三种模式:独立的 solo-server 模式、重量级的双服务器模式和分布式多执行程序模式。本文将介绍如何使用 azkaban v3.90.0 在 Linux 环境中进行双服务器模式部署并连接 XuguDB。
框架名称 | 适配起始版本 | 官网地址 | 源框架下载地址 | XuguDB框架下载 | demo程序地址 |
---|---|---|---|---|---|
azkaban | 3.51.0 | azkaban官网 | azkaban源码 | 版本发布 | 源码内附 |
提示
其他支持版本可详见版本发布列表
一、使用说明
1.1 下载 azkaban 源码
访问虚谷数据库开放源代码仓库,选择所需版本分支。
图 1.1 azkaban仓库分支选择
下载当前分支源码 zip 文件。
图 1.2 azkaban分支代码下载
1.2 构建 azkaban 制品文件
计算机已安装 JDK 1.8 和 Gradle 5.4。
图 1.3 运行环境检查
使用 gradle 命令
gradle build -x test
构建项目,出现BUILD SUCCESSFUL
即执行成功。图 1.4 azkaban构建命令
图 1.5 azkaban构建成功
提示
官方文档:Building from Source
因本地计算机环境问题构建源代码失败时,可咨询相关人员直接获取制品文件。
二、部署示例
2.1 前提条件
- 计算机已安装 DBManager 或者 xgconsole。
- 计算机已部署 XuguDB 12.0.0 或有能连接访问的虚谷数据库实例。
- 可运行 Java 程序的 Linux 操作系统环境。
- SSH 客户端
2.2 操作步骤
- 数据库环境准备
- 部署
Azkaban Executor Server
。 - 部署
Azkaban Web Server
。 - 访问控制台,测试任务执行。
- 流程触发依赖插件说明
2.2.1 数据库环境准备
为 azkaban 运行创建库与用户。
sqlCREATE DATABASE `azkaban` CHARACTER SET 'utf8_general_ci' TIME ZONE 'GMT+08:00'; CREATE USER `azkaban` IDENTIFIED BY 'azkaban'; GRANT DBA IN SCHEMA `azkaban` TO `azkaban`;
运行最新的单独表创建脚本,在 xugu 实例中创建表。或者运行构建过程中生成的
create-all-sql-<version>.sql
文件,该文件的位置./azkaban-db/build/sql/create-all-sql-3.91.0-13-g26f9b6d1-xugu.sql
是在构建 azkaban-db 模块后得到的。图 2.1 azkaban-db数据库SQL文件
提示
create-all-sql-<version>.sql
中的 version 来自 git 仓库版本号。下面示例中 3.91.0-13-g26f9b6d1
仅在名称上存在差异,无实际影响。
2.2.2 部署 Azkaban Executor Server
将
./azkaban-exec-server/build/distributions/azkaban-exec-server-3.91.0-13-g26f9b6d1.tar.gz
上传服务器,解压,重命名为azkaban-exec-server
。shelltar -zxf azkaban-exec-server-3.91.0-13-g26f9b6d1.tar.gz mv azkaban-exec-server-3.91.0-13-g26f9b6d1 azkaban-exec-server
图 2.2 azkaban-exec-server上传服务器
azkaban-exec-server
配置文件azkaban.properties
内容修改。shellvim azkaban-exec-server/conf/azkaban.properties
properties# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/opt/azkaban/azkaban-web-server/web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/opt/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/opt/azkaban/azkaban-web-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://localhost:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings azkaban.jobtype.plugin.dir=/opt/azkaban/azkaban-exec-server/plugins/jobtypes/ # Azkaban mysql settings by default. Users should configure their own username and password. database.type=xugu xugu.port=5138 xugu.host=192.168.213.1 xugu.database=azkaban xugu.user=azkaban xugu.password=azkaban xugu.schema=azkaban # Azkaban Executor settings executor.maxThreads=50 executor.flow.threads=30
换行符格式转换:在
azkaban-exec-server
目录中执行以下命令:shellsed -i 's/\r$//' ./bin/start-exec.sh sed -i 's/\r$//' ./bin/shutdown-exec.sh sed -i 's/\r$//' ./bin/internal/util.sh sed -i 's/\r$//' ./bin/internal/internal-start-executor.sh
图 2.3 azkaban-exec-server处理换行符
在
bin
目录上一层目录运行脚本start-exec.sh
启动azkaban-exec-server
,根据 log 日志查看启动地址及端口,激活 executors。shellsh bin/start-exec.sh tail -f -n 20 executorServerLog__2025-06-26+17:32:17.out curl -G "localhost:35076/executor?action=activate" && echo
图 2.4 azkaban-exec-server启动日志
查询数据库表 EXECUTORS 中相关信息。
cmdSQL> select * from EXECUTORS; +-----+-----------+-------+--------+ | ID | HOST | PORT | ACTIVE | +-----+-----------+-------+--------+ | 2 | localhost | 35076 | T | | 101 | localhost | 44645 | T | +-----+-----------+-------+--------+ (2 rows) Use time:1 ms. SQL>
2.2.3 部署 Azkaban Web Server
将
azkaban/azkaban-web-server/build/distributions/azkaban-web-server-3.91.0-13-g26f9b6d1.tar.gz
上传服务器,解压、重命名为azkaban-web-server
。shelltar -zxf azkaban-web-server-3.91.0-13-g26f9b6d1.tar.gz mv azkaban-web-server-3.91.0-13-g26f9b6d1 azkaban-web-server
图 2.5 azkaban-web-server上传服务器
azkaban-web-server
配置文件azkaban.properties
内容修改。shellvim azkaban-web-server/conf/azkaban.properties
properties# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#00FF00 azkaban.default.servlet.path=/index web.resource.dir=/opt/azkaban/azkaban-web-server/web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/opt/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/opt/azkaban/azkaban-web-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Azkaban Executor settings # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=xugu xugu.port=5138 xugu.host=192.168.213.1 xugu.database=azkaban xugu.user=azkaban xugu.password=azkaban xugu.schema=azkaban #Multiple Executor azkaban.use.multiple.executors=true azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1 # 插件使用 #azkaban.server.schedule.enable_quartz=true #azkaban.dependency.plugin.dir=/opt/azkaban/plugins/dependency/ # #org.quartz.dataSource.quartzDS.driver=com.xugu.cloudjdbc.Driver #org.quartz.dataSource.quartzDS.URL=jdbc:xugu://192.168.213.1:5138/azkaban?char_set=UTF8 #org.quartz.dataSource.quartzDS.user=azkaban #org.quartz.dataSource.quartzDS.password=azkaban #org.quartz.threadPool.threadCount=3 #org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate #org.quartz.jobStore.tablePrefix=QRTZ_ #org.quartz.jobStore.dataSource=quartzDS
换行符格式转换:在
azkaban-web-server
目录中执行以下命令:shellsed -i 's/\r$//' ./bin/start-web.sh sed -i 's/\r$//' ./bin/shutdown-web.sh sed -i 's/\r$//' ./bin/internal/util.sh sed -i 's/\r$//' ./bin/internal/internal-start-web.sh
在
bin
目录上一层目录运行脚本启动,日志中使用了插件,如图 2.6 所示:shellsh bin/start-web.sh tail -f -n 20 webServerLog_2025-06-26+17:51:47.out
图 2.6 azkaban-web-server启动日志
2.2.4 访问控制台
找到
azkaban-web-server/conf/azkaban.properties
配置文件中属性jetty.port
端口号以及所部署机器的ip
地址,浏览器访问 Login 登录页面。图 2.7 azkaban登录页面
默认登录密码在
azkaban-web-server/conf/azkaban.properties
配置文件中属性:user.manager.xml.file=/opt/azkaban/azkaban-web-server/conf/azkaban-users.xml
指定用户管理器,XmlUserManager
内置用户名密码 azkaban。
提示
官方文档:Using Azkaban
2.2.5 流程触发依赖插件
目前,Azkaban 支持通过调度或 Ajax API 启动流程。然而,它们的功能有限,因为有时作业需要按需自动执行。事件触发器是 Azkaban 引入的一项新功能。它定义了一种新的触发流程的范式——在 Kafka 事件到达时触发流程。这个概念使用户能够定义流程所依赖的事件。一旦所有事件准备就绪,工作流将被触发。
将构建源码制品文件上传服务器。
创建文件夹用于存放插件,如:
/opt/azkaban/plugins/dependency/kafka/
shellmkdir -p /opt/azkaban/plugins/dependency/kafka/
将
./az-flow-trigger-dependency-type/build/libs/az-flow-trigger-dependency-type-3.91.0-13-g26f9b6d1.jar
上传服务器指定文件夹将
./az-flow-trigger-dependency-type/kafka-event-trigger/build/libs/kafka-event-trigger-3.91.0-13-g26f9b6d1.jar
上传服务器指定文件夹将
./az-flow-trigger-dependency-type/kafka-event-trigger/build/libs/kafka-event-trigger-3.91.0-13-g26f9b6d1-fat.jar
上传服务器指定文件夹
在上述文件夹中创建配置文件
dependency.properties
。shellvim dependency.properties
propertiesdependency.class=trigger.kafka.KafkaDependencyCheck #dependency.classpath要求绝对路径 dependency.classpath=/opt/azkaban/plugins/dependency/kafka/kafka-event-trigger-3.91.0-11-gff80be73-fat.jar kafka.broker.url=192.168.213.133:9092
图 2.8 azkaban流程触发依赖插件
azkaban-web-server/conf/azkaban.properties
配置文件中添加插件相关配置。- 示例代码,详情见 azkaban-web-server 配置
properties# 插件使用 azkaban.server.schedule.enable_quartz=true azkaban.dependency.plugin.dir=/opt/azkaban/plugins/dependency/ org.quartz.dataSource.quartzDS.driver=com.xugu.cloudjdbc.Driver org.quartz.dataSource.quartzDS.URL=jdbc:xugu://192.168.213.1:5138/azkaban?char_set=UTF8 org.quartz.dataSource.quartzDS.user=azkaban org.quartz.dataSource.quartzDS.password=azkaban org.quartz.threadPool.threadCount=3 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.tablePrefix=QRTZ_ org.quartz.jobStore.dataSource=quartzDS
参考 Kafka 快速入门启动 kafka 服务。
shell#Start ZooKeeper bin/zookeeper-server-start.sh config/zookeeper.properties #Start Kafka Server bin/kafka-server-start.sh config/server.properties
重新启动
Azkaban Executor Server
、Azkaban Web Server
。在控制台页面按照官网文档创建项目,上传
./az-examples/kafka-event-based-trigger/eventTriggerProject.zip
示例触发器。图 2.9 azkaban创建项目
图 2.10 azkaban上传项目
向 Topic 发送 Json 事件
- kafka 命令行工具发送消息
shellkafka-console-producer.sh --broker-list 192.168.213.133:9092 --topic AzEvent_Topic4 < recordPartition.json kafka-console-producer.sh --broker-list 192.168.213.133:9092 --topic AzEvent_Topic1 < recordHadoop.json
- 示例代码:recordPartition.json
json{ "name":"Charlie", "team": "Azkaban", "event":"MetastorePartitionAuditEvent" }
- 示例代码:recordHadoop.json
json{ "name":"Charlie", "team": "Azkaban", "event":"hadoop1.aa" }
图 2.11 kafka发送主题消息
访问本地 azkaban 控制台,查看触发器运行详情
图 2.12 azkaban查看历史记录
三、常见问题&解决办法
- 如何关闭 azkaban
- 执行
bin
目录下脚本文件
shellcd ../azkaban-web-server sh bin/shutdown-web.sh cd ../azkaban-exec-server sh bin/shutdown-exec.sh
- 执行
- 示例作业项目文件获取
- 源码中附带:
.\az-examples\
- 官方文档参考:create flows
- 源码中附带: