Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


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.8Gradle 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 ServerAzkaban 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