1. Azkaban简介与版本说明
Azkaban是由LinkedIn开源的批量工作流调度系统,用于管理和调度Hadoop作业。Azkaban提供了友好的Web界面,支持工作流可视化、定时调度、依赖管理等功能。更多学习教程www.fgedu.net.cn
Azkaban最新版本:
Azkaban 3.90.0 (稳定版本)
Azkaban 3.81.0 (稳定版本)
Azkaban 3.70.0 (历史版本)
Azkaban 3.57.0 (历史版本)
Azkaban架构组件:
1. Azkaban Web Server
– 提供Web管理界面
– 处理用户请求
– 项目管理、作业调度
– 权限管理
2. Azkaban Executor Server
– 执行工作流和作业
– 支持多Executor分布式部署
– 资源管理和调度
3. MySQL数据库
– 存储项目、作业、执行记录
– 用户权限信息
– 调度配置信息
2. Azkaban下载方式
Azkaban提供源码编译和预编译包两种下载方式。学习交流加群风哥微信: itpux-com
方式一:GitHub源码下载
$ mkdir -p /fgeudb/software/azkaban
$ cd /fgeudb/software/azkaban
# 克隆源码仓库
$ git clone https://github.com/azkaban/azkaban.git
$ cd azkaban
$ git checkout tags/4.0.0
# 编译源码
$ ./gradlew build installDist -x test
输出示例如下:
BUILD SUCCESSFUL in 5m 30s
123 actionable tasks: 123 executed
# 查看编译产物
$ ls -la azkaban-web-server/build/distributions/
输出示例如下:
total 150000
-rw-r–r– 1 root root 75000000 Apr 4 10:00 azkaban-web-server-4.0.0.tar.gz
-rw-r–r– 1 root root 75000000 Apr 4 10:00 azkaban-web-server-4.0.0.zip
$ ls -la azkaban-exec-server/build/distributions/
输出示例如下:
total 100000
-rw-r–r– 1 root root 50000000 Apr 4 10:00 azkaban-exec-server-4.0.0.tar.gz
-rw-r–r– 1 root root 50000000 Apr 4 10:00 azkaban-exec-server-4.0.0.zip
方式二:下载预编译包
$ wget https://github.com/azkaban/azkaban/releases/download/4.0.0/azkaban-web-server-4.0.0.tar.gz
# 下载Executor Server
$ wget https://github.com/azkaban/azkaban/releases/download/4.0.0/azkaban-exec-server-4.0.0.tar.gz
# 下载SQL脚本
$ wget https://github.com/azkaban/azkaban/releases/download/4.0.0/azkaban-db-4.0.0.tar.gz
# 查看下载文件
$ ls -lh
输出示例如下:
total 170M
-rw-r–r– 1 root root 75M Apr 4 10:00 azkaban-web-server-4.0.0.tar.gz
-rw-r–r– 1 root root 50M Apr 4 10:00 azkaban-exec-server-4.0.0.tar.gz
-rw-r–r– 1 root root 45M Apr 4 10:00 azkaban-db-4.0.0.tar.gz
方式三:国内镜像下载
$ git clone https://gitee.com/mirrors/azkaban.git
$ cd azkaban
$ git checkout tags/4.0.0
# 或使用华为云镜像
$ wget https://mirrors.huawei.com/github.com/azkaban/azkaban/releases/download/4.0.0/azkaban-web-server-4.0.0.tar.gz
3. Azkaban安装部署
Azkaban需要部署Web Server、Executor Server和MySQL数据库。学习交流加群风哥QQ113257174
步骤1:创建数据库
$ mysql -h 192.168.1.51 -u root -proot123
# 创建Azkaban数据库
mysql> CREATE DATABASE azkaban DEFAULT CHARACTER SET utf8mb4;
# 创建Azkaban用户
mysql> CREATE USER ‘azkaban’@’%’ IDENTIFIED BY ‘azkaban123’;
mysql> GRANT ALL PRIVILEGES ON azkaban.* TO ‘azkaban’@’%’;
mysql> FLUSH PRIVILEGES;
# 导入数据库脚本
$ mysql -h 192.168.1.51 -u azkaban -pazkaban123 azkaban < /fgeudb/software/azkaban/azkaban-db-4.0.0/create-all-sql-4.0.0.sql
# 验证表创建
mysql> USE azkaban;
mysql> SHOW TABLES;
输出示例如下:
+----------------------+
| Tables_in_azkaban |
+----------------------+
| active_executing_flows|
| active_schedules |
| execution_flows |
| execution_jobs |
| execution_logs |
| executor_events |
| executors |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| triggers |
| users |
+----------------------+
步骤2:解压安装
$ cd /fgeudb
$ tar -zxvf /fgeudb/software/azkaban/azkaban-web-server-4.0.0.tar.gz
$ mv azkaban-web-server-4.0.0 azkaban-web
# 解压Executor Server
$ tar -zxvf /fgeudb/software/azkaban/azkaban-exec-server-4.0.0.tar.gz
$ mv azkaban-exec-server-4.0.0 azkaban-exec
# 查看目录结构
$ ls -la /fgeudb/azkaban-web/
输出示例如下:
total 16
drwxr-xr-x 2 root root 4096 Apr 4 10:00 bin
drwxr-xr-x 2 root root 4096 Apr 4 10:00 conf
drwxr-xr-x 2 root root 4096 Apr 4 10:00 lib
drwxr-xr-x 2 root root 4096 Apr 4 10:00 web
$ ls -la /fgeudb/azkaban-exec/
输出示例如下:
total 16
drwxr-xr-x 2 root root 4096 Apr 4 10:00 bin
drwxr-xr-x 2 root root 4096 Apr 4 10:00 conf
drwxr-xr-x 2 root root 4096 Apr 4 10:00 lib
drwxr-xr-x 2 root root 4096 Apr 4 10:00 plugins
步骤3:配置Web Server
$ vi /fgeudb/azkaban-web/conf/azkaban.properties
# Azkaban配置
azkaban.name= Azkaban
azkaban.label= Workflow Scheduler
azkaban.color=#FF360A
# 数据库配置
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.51
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban123
mysql.numconnections=100
# Web Server配置
web.resource.dir=/fgeudb/azkaban-web/web
default.timezone.id=Asia/Shanghai
jetty.port=8081
jetty.use.ssl=false
jetty.maxThreads=25
# Executor配置
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
# 创建管理员用户
$ vi /fgeudb/azkaban-web/conf/azkaban-users.xml
<azkaban-users>
<user groups=”azkaban” password=”azkaban” roles=”admin” username=”azkaban”/>
<user password=”admin” roles=”admin” username=”admin”/>
<role name=”admin” permissions=”ADMIN”/>
<role name=”metrics” permissions=”METRICS”/>
</azkaban-users>
步骤4:配置Executor Server
$ vi /fgeudb/azkaban-exec/conf/azkaban.properties
# Azkaban配置
azkaban.name= Azkaban
default.timezone.id=Asia/Shanghai
# 数据库配置
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.51
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban123
mysql.numconnections=100
# Executor配置
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
# 全局属性
azkaban.project.dir=/fgeudb/azkaban-exec/projects
# 创建项目目录
$ mkdir -p /fgeudb/azkaban-exec/projects
步骤5:启动服务
$ cd /fgeudb/azkaban-exec
$ bin/start-exec.sh
输出示例如下:
Starting azkaban-exec-server on port 12321 …
# 激活Executor
$ curl -G “192.168.1.51:$(<./executor.port)/executor?action=activate" && echo
输出示例如下:
{"status":"success"}
# 启动Web Server
$ cd /fgeudb/azkaban-web
$ bin/start-web.sh
输出示例如下:
Starting azkaban-web-server on port 8081 ...
# 验证服务状态
$ jps
输出示例如下:
12345 AzkabanWebServer
12346 AzkabanExecutorServer
# 检查端口
$ netstat -tlnp | grep -E "8081|12321"
输出示例如下:
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 12345/java
tcp 0 0 0.0.0.0:12321 0.0.0.0:* LISTEN 12346/java
4. Azkaban配置详解
Azkaban配置包括Web Server配置、Executor Server配置和插件配置。风哥提示:正确配置时区和数据库连接是Azkaban正常运行的前提。
Web Server核心配置
# 基本配置
azkaban.name= Azkaban # 系统名称
azkaban.label=Workflow Scheduler # 系统标签
default.timezone.id=Asia/Shanghai # 时区设置
# 数据库配置
database.type=mysql
mysql.host=192.168.1.51
mysql.port=3306
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban123
mysql.numconnections=100
# Jetty配置
jetty.port=8081 # Web服务端口
jetty.use.ssl=false # 是否启用SSL
jetty.maxThreads=25 # 最大线程数
jetty.ssl.port=8443 # SSL端口
# Executor选择策略
azkaban.use.multiple.executors=true # 启用多Executor
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
# 通知配置
mail.enabled=true
mail.host=smtp.fgedu.net.cn
mail.port=25
mail.username=azkaban@fgedu.net.cn
mail.password=mail123
Executor Server核心配置
# 基本配置
default.timezone.id=Asia/Shanghai
# 数据库配置
database.type=mysql
mysql.host=192.168.1.51
mysql.port=3306
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban123
# Executor配置
executor.maxThreads=50 # 最大线程数
executor.port=12321 # Executor端口
executor.flow.threads=30 # 流程线程数
# 项目目录
azkaban.project.dir=/fgeudb/azkaban-exec/projects
# 资源配置
memoryCheck.interval=30 # 内存检查间隔
flow.num.job.threads=10 # 作业线程数
5. 项目创建与作业配置
Azkaban使用项目来组织工作流,每个项目可以包含多个Flow。更多学习教程公众号风哥教程itpux_com
步骤1:创建项目
# URL: http://192.168.1.51:8081
# 登录信息
用户名: admin
密码: admin
# 创建项目步骤:
# 1. 点击”Create Project”
# 2. 输入项目名称: fgedu_etl
# 3. 输入项目描述: ETL Workflow
# 4. 点击”Create Project”
步骤2:创建作业文件
$ mkdir -p /fgeudb/azkaban-jobs/fgedu_etl
$ cd /fgeudb/azkaban-jobs/fgedu_etl
# 创建Sqoop导入作业
$ vi sqoop_import.job
type=command
command=/fgeudb/sqoop/bin/sqoop import \
–connect jdbc:mysql://192.168.1.51:3306/fgedu_db \
–username root \
–password root123 \
–table orders \
–target-dir /user/hadoop/orders \
–num-mappers 4
# 创建Hive处理作业
$ vi hive_process.job
type=command
dependencies=sqoop_import
command=/fgeudb/hive/bin/hive -f /fgeudb/scripts/process_orders.hql
# 创建Spark分析作业
$ vi spark_analysis.job
type=command
dependencies=hive_process
command=/fgeudb/spark/bin/spark-submit \
–class com.fgedu.spark.OrderAnalysis \
–master yarn \
–deploy-mode cluster \
/fgeudb/jars/spark-jobs.jar \
/user/hadoop/orders \
/user/hadoop/output
# 创建数据质量检查作业
$ vi data_quality.job
type=command
dependencies=spark_analysis
command=sh /fgeudb/scripts/check_data_quality.sh
# 创建通知作业
$ vi send_email.job
type=command
dependencies=data_quality
command=echo “ETL workflow completed successfully” | mail -s “ETL Notification” admin@fgedu.net.cn
步骤3:打包上传项目
$ cd /fgeudb/azkaban-jobs/fgedu_etl
$ zip -r fgedu_etl.zip *.job
# 查看打包内容
$ unzip -l fgedu_etl.zip
输出示例如下:
Archive: fgedu_etl.zip
Length Date Time Name
——— ———- —– —-
256 2026-04-04 10:00 sqoop_import.job
128 2026-04-04 10:00 hive_process.job
256 2026-04-04 10:00 spark_analysis.job
128 2026-04-04 10:00 data_quality.job
128 2026-04-04 10:00 send_email.job
——— ——-
896 5 files
# 上传项目
# 1. 在Web界面选择项目 fgedu_etl
# 2. 点击”Upload”按钮
# 3. 选择 fgedu_etl.zip 文件
# 4. 点击”Upload”完成上传
步骤4:执行工作流
# 1. 选择项目 fgedu_etl
# 2. 点击”Flows”标签
# 3. 选择工作流 send_email (最后一个作业会显示整个流程)
# 4. 点击”Execute Flow”
# 5. 配置执行参数(可选)
# 6. 点击”Execute Flow”开始执行
# 查看执行状态
# 在”Executing”页面可以看到正在执行的工作流
# 点击工作流可以查看详细执行日志
# 执行日志示例:
26/04/04 10:00:00 INFO sqoop_import: Starting command execution
26/04/04 10:00:30 INFO sqoop_import: Command completed successfully
26/04/04 10:00:30 INFO hive_process: Starting command execution
26/04/04 10:01:00 INFO hive_process: Command completed successfully
26/04/04 10:01:00 INFO spark_analysis: Starting command execution
26/04/04 10:01:30 INFO spark_analysis: Command completed successfully
26/04/04 10:01:30 INFO data_quality: Starting command execution
26/04/04 10:01:45 INFO data_quality: Command completed successfully
26/04/04 10:01:45 INFO send_email: Starting command execution
26/04/04 10:01:46 INFO send_email: Command completed successfully
6. 定时调度配置
Azkaban支持灵活的定时调度配置,可以设置周期性执行工作流。from:www.itpux.com
步骤1:创建定时任务
# 1. 选择项目和Flow
# 2. 点击”Schedule Flow”
# 3. 配置调度时间:
# – 时区: Asia/Shanghai
# – 执行时间: 02:00
# – 重复周期: 每天执行
# – 开始日期: 2026-04-01
# – 结束日期: 2027-04-01
# 4. 点击”Schedule”保存
# 调度配置说明:
# – Minutes: 0-59
# – Hours: 0-23
# – Day of Month: 1-31
# – Month: 1-12
# – Day of Week: 1-7 (1=周日)
# – Year: 年份
# 每天凌晨2点执行示例:
Minutes: 0
Hours: 2
Day of Month: *
Month: *
Day of Week: *
步骤2:配置调度选项
# 失败重试配置
failure.emails=admin@fgedu.net.cn,ops@fgedu.net.cn
success.emails=admin@fgedu.net.cn
notify.first.failure=true
retries=3
retry.backoff=60000
# 并发配置
concurrent.skip.enabled=true
# SLA配置
sla.emails=admin@fgedu.net.cn
sla.duration=1h
sla.email.action=FINISH
步骤3:管理定时任务
# 在Web界面点击”Schedule”标签
# 暂停定时任务
# 点击定时任务右侧的”Pause”按钮
# 恢复定时任务
# 点击定时任务右侧的”Resume”按钮
# 删除定时任务
# 点击定时任务右侧的”Remove”按钮
# 手动触发执行
# 点击定时任务右侧的”Execute”按钮
7. Azkaban监控运维
Azkaban提供Web界面和API进行监控和管理。
步骤1:查看执行历史
# 1. 点击”History”标签
# 2. 可以按项目、时间范围筛选
# 3. 点击执行记录查看详细日志
# 查看作业执行日志
# 1. 选择执行记录
# 2. 点击”Job Details”
# 3. 查看”Logs”标签
# 日志输出示例:
26/04/04 10:00:00 INFO job: Job started
26/04/04 10:00:00 INFO job: Running command: sqoop import …
26/04/04 10:00:05 INFO job: Output: 26/04/04 10:00:05 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
26/04/04 10:00:30 INFO job: Output: 26/04/04 10:00:30 INFO mapreduce.ImportJobBase: Transferred 125.5 MB
26/04/04 10:00:30 INFO job: Job completed successfully
步骤2:使用API管理
$ curl -k -X POST –data “action=login&username=admin&password=admin” https://192.168.1.51:8081/api
输出示例如下:
{“session.id”:”abc123def456″,”status”:”success”}
# 获取项目列表
$ curl -k –get –data “session.id=abc123def456” https://192.168.1.51:8081/manager?action=fetchProjects
输出示例如下:
{“projects”:[{“id”:1,”name”:”fgedu_etl”}]}
# 执行工作流
$ curl -k -X POST –data “session.id=abc123def456&ajax=executeFlow&project=fgedu_etl&flow=send_email” https://192.168.1.51:8081/executor
输出示例如下:
{“execid”:1,”status”:”success”}
# 查看执行状态
$ curl -k –get –data “session.id=abc123def456&ajax=fetchExecFlow&execid=1” https://192.168.1.51:8081/executor
输出示例如下:
{“execid”:1,”status”:”SUCCEEDED”,”startTime”:1712217600000,”endTime”:1712217700000}
# 取消执行
$ curl -k -X POST –data “session.id=abc123def456&ajax=cancelFlow&execid=1” https://192.168.1.51:8081/executor
步骤3:配置监控告警
# 在项目设置中配置通知邮箱
# 失败通知配置
$ vi /fgeudb/azkaban-web/conf/azkaban.properties
mail.enabled=true
mail.host=smtp.fgedu.net.cn
mail.port=25
mail.username=azkaban@fgedu.net.cn
mail.password=mail123
mail.tls=true
# 配置作业级通知
$ vi /fgeudb/azkaban-jobs/fgedu_etl/send_email.job
type=command
dependencies=data_quality
command=echo “ETL workflow completed” | mail -s “ETL Notification” admin@fgedu.net.cn
failure.emails=admin@fgedu.net.cn
success.emails=admin@fgedu.net.cn
notify.first.failure=true
步骤4:运维管理
$ curl -k –get –data “session.id=abc123def456&ajax=getExecutors” https://192.168.1.51:8081/api
输出示例如下:
{“executors”:[{“executorId”:1,”host”:”192.168.1.51″,”port”:12321,”active”:true}]}
# 重启Web Server
$ cd /fgeudb/azkaban-web
$ bin/shutdown-web.sh
$ bin/start-web.sh
# 重启Executor Server
$ cd /fgeudb/azkaban-exec
$ bin/shutdown-exec.sh
$ bin/start-exec.sh
# 激活Executor
$ curl -G “192.168.1.51:$(<./executor.port)/executor?action=activate" && echo
# 查看日志
$ tail -f /fgeudb/azkaban-web/logs/azkaban-webserver.log
$ tail -f /fgeudb/azkaban-exec/logs/azkaban-execserver.log
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
