Skip to content

适用虚谷数据库版本

v12.10.13



适用虚谷数据库版本

v12.10.13


azkaban 使用手册 ​

📄字数 8.7K
👁️阅读量 加载中...

azkaban 是一个分布式工作流管理器,用于解决 Hadoop 作业依赖问题。在 v3.0 版本中,提供了三种模式:独立的 solo-server 模式、重量级的双服务器模式和分布式多执行程序模式。本文将介绍如何使用 azkaban v3.90.0 在 Linux 环境中进行双服务器模式部署并连接 XuguDB。

框架名称适配起始版本官网地址源框架下载地址XuguDB框架下载demo程序地址
azkaban3.51.0azkaban官网azkaban源码版本发布源码内附

提示

其他支持版本可详见版本发布列表

一、使用说明 ​

1.1 下载 azkaban 源码 ​

  1. 访问虚谷数据库开放源代码仓库,选择所需版本分支。

    azkaban仓库分支选择图 1.1 azkaban仓库分支选择
  2. 下载当前分支源码 zip 文件。

    azkaban分支代码下载图 1.2 azkaban分支代码下载

1.2 构建 azkaban 制品文件 ​

  1. 计算机已安装 JDK 1.8 和 Gradle 5.4。

    运行环境检查图 1.3 运行环境检查
  2. 使用 gradle 命令 gradle build -x test 构建项目,出现 BUILD SUCCESSFUL 即执行成功。

    azkaban构建命令图 1.4 azkaban构建命令
    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 数据库环境准备 ​

  1. 为 azkaban 运行创建库与用户。

    sql
    CREATE 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`;
  2. 运行最新的单独表创建脚本,在 xugu 实例中创建表。或者运行构建过程中生成的 create-all-sql-<version>.sql 文件,该文件的位置 ./azkaban-db/build/sql/create-all-sql-3.91.0-13-g26f9b6d1-xugu.sql 是在构建 azkaban-db 模块后得到的。

    azkaban-db数据库SQL文件图 2.1 azkaban-db数据库SQL文件

提示

create-all-sql-<version>.sql 中的 version 来自 git 仓库版本号。下面示例中 3.91.0-13-g26f9b6d1 仅在名称上存在差异,无实际影响。

2.2.2 部署 Azkaban Executor Server ​

  1. 将 ./azkaban-exec-server/build/distributions/azkaban-exec-server-3.91.0-13-g26f9b6d1.tar.gz 上传服务器,解压,重命名为 azkaban-exec-server。

    shell
    tar -zxf azkaban-exec-server-3.91.0-13-g26f9b6d1.tar.gz
    mv azkaban-exec-server-3.91.0-13-g26f9b6d1 azkaban-exec-server
    azkaban-exec-server上传服务器图 2.2 azkaban-exec-server上传服务器
  2. azkaban-exec-server 配置文件 azkaban.properties 内容修改。

    shell
    vim 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
  3. 换行符格式转换:在 azkaban-exec-server 目录中执行以下命令:

    shell
    sed -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
    azkaban-exec-server处理换行符图 2.3 azkaban-exec-server处理换行符
  4. 在 bin 目录上一层目录运行脚本 start-exec.sh 启动 azkaban-exec-server,根据 log 日志查看启动地址及端口,激活 executors。

    shell
    sh bin/start-exec.sh
    tail -f -n 20 executorServerLog__2025-06-26+17:32:17.out
    curl -G "localhost:35076/executor?action=activate" && echo
    azkaban-exec-server启动日志图 2.4 azkaban-exec-server启动日志
  5. 查询数据库表 EXECUTORS 中相关信息。

    cmd
    SQL> 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 ​

  1. 将 azkaban/azkaban-web-server/build/distributions/azkaban-web-server-3.91.0-13-g26f9b6d1.tar.gz 上传服务器,解压、重命名为 azkaban-web-server。

    shell
    tar -zxf azkaban-web-server-3.91.0-13-g26f9b6d1.tar.gz
    mv azkaban-web-server-3.91.0-13-g26f9b6d1 azkaban-web-server
    azkaban-web-server上传服务器图 2.5 azkaban-web-server上传服务器
  2. azkaban-web-server 配置文件 azkaban.properties 内容修改。

    shell
    vim 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
  3. 换行符格式转换:在 azkaban-web-server 目录中执行以下命令:

    shell
    sed -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
  4. 在 bin 目录上一层目录运行脚本启动,日志中使用了插件,如图 2.6 所示:

    shell
    sh bin/start-web.sh
    tail -f -n 20 webServerLog_2025-06-26+17:51:47.out
    azkaban-web-server启动日志图 2.6 azkaban-web-server启动日志

2.2.4 访问控制台 ​

  1. 找到 azkaban-web-server/conf/azkaban.properties 配置文件中属性 jetty.port 端口号以及所部署机器的 ip 地址,浏览器访问 Login 登录页面。

    azkaban登录页面图 2.7 azkaban登录页面
  2. 默认登录密码在 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 事件到达时触发流程。这个概念使用户能够定义流程所依赖的事件。一旦所有事件准备就绪,工作流将被触发。

提示

官方文档:Flow Trigger Dependency Plugin

  1. 将构建源码制品文件上传服务器。

    • 创建文件夹用于存放插件,如:/opt/azkaban/plugins/dependency/kafka/

      shell
      mkdir -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 上传服务器指定文件夹

  2. 在上述文件夹中创建配置文件 dependency.properties。

    shell
    vim dependency.properties
    properties
    dependency.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
    azkaban流程触发依赖插件图 2.8 azkaban流程触发依赖插件
  3. azkaban-web-server/conf/azkaban.properties配置文件中添加插件相关配置。

    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
  4. 参考 Kafka 快速入门启动 kafka 服务。

    shell
    #Start ZooKeeper
    bin/zookeeper-server-start.sh config/zookeeper.properties
    #Start Kafka Server
    bin/kafka-server-start.sh config/server.properties
  5. 重新启动 Azkaban Executor Server、Azkaban Web Server。

  6. 在控制台页面按照官网文档创建项目,上传 ./az-examples/kafka-event-based-trigger/eventTriggerProject.zip 示例触发器。

    azkaban创建项目图 2.9 azkaban创建项目
    azkaban上传项目图 2.10 azkaban上传项目
  7. 向 Topic 发送 Json 事件

    • kafka 命令行工具发送消息
    shell
    kafka-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"
    }
    kafka发送主题消息图 2.11 kafka发送主题消息
  8. 访问本地 azkaban 控制台,查看触发器运行详情

    azkaban查看历史记录图 2.12 azkaban查看历史记录

三、常见问题&解决办法 ​

  1. 如何关闭 azkaban
    • 执行 bin 目录下脚本文件
    shell
    cd ../azkaban-web-server
    sh bin/shutdown-web.sh
    cd ../azkaban-exec-server
    sh bin/shutdown-exec.sh
  2. 示例作业项目文件获取
    • 源码中附带:.\az-examples\
    • 官方文档参考:create flows