一键导入
azkaban-xugudb-adapter
Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Azkaban 的工作流管理器配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、工作流定义、任务调度、监控管理等。适用于大数据作业调度和管理场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Azkaban 的工作流管理器配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、工作流定义、任务调度、监控管理等。适用于大数据作业调度和管理场景。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Activiti 工作流引擎与虚谷数据库(XuguDB)集成适配指南。当用户需要在 Spring Boot 项目中使用 Activiti 工作流引擎连接 XuguDB 时使用此技能,包括流程引擎配置、数据源设置、BPMN 流程定义、任务管理、历史记录查询等。适用于企业级工作流应用、审批流程、业务流程自动化等场景。
AnyLine 动态数据源框架适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 AnyLine 的 Java 项目配置或适配到虚谷数据库时使用此技能,包括动态数据源注册、切换、元数据操作、DDL/DML 自动生成等。适用于数据中台、低代码平台、异构数据库迁移等场景。
Camunda BPM 平台适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Camunda 的工作流和决策自动化平台配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、BPMN 流程定义、任务管理、REST API、UI 管理界面等。适用于企业级工作流应用、审批流程、业务流程自动化、案例管理等场景。
CloudBeaver 云数据库管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要使用 CloudBeaver 连接和管理虚谷数据库时使用此技能,包括部署安装、驱动配置、连接管理、用户权限等。适用于团队协作、远程数据库管理场景。
DataEase 开源 BI 工具适配虚谷数据库(XuguDB)的完整指南。当用户需要将 DataEase 连接到虚谷数据库进行数据可视化分析时使用此技能,包括驱动配置、数据源连接、数据集创建、仪表板设计等。适用于企业数据可视化、自助分析、报表分享等场景。
阿里巴巴 DataX 数据同步工具适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 DataX 的数据同步工具配置或适配到虚谷数据库时使用此技能,包括安装部署、插件配置、任务配置、性能优化等。适用于数据同步、数据迁移、数据集成等场景。
| name | azkaban-xugudb-adapter |
| description | Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整指南。当用户需要将基于 Azkaban 的工作流管理器配置或适配到虚谷数据库时使用此技能,包括安装部署、数据库配置、工作流定义、任务调度、监控管理等。适用于大数据作业调度和管理场景。 |
本技能提供 Azkaban 工作流管理器适配虚谷数据库(XuguDB)的完整配置指南。Azkaban 是 LinkedIn 开源的工作流管理器,主要用于管理 Hadoop 作业,现在可以通过配置支持虚谷数据库作为元数据存储。
适用场景:
核心特性:
下载 Azkaban:
# 下载 Azkaban 二进制包
wget https://github.com/azkaban/azkaban/releases/download/3.90.0/azkaban-exec-server-3.90.0.tar.gz
wget https://github.com/azkaban/azkaban/releases/download/3.90.0/azkaban-web-server-3.90.0.tar.gz
# 解压
tar -xzf azkaban-exec-server-3.90.0.tar.gz
tar -xzf azkaban-web-server-3.90.0.tar.gz
创建数据库和用户:
-- 在虚谷数据库中创建 Azkaban 数据库
CREATE DATABASE azkaban;
-- 创建用户(可选)
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban_password';
GRANT ALL PRIVILEGES ON azkaban.* TO 'azkaban'@'%';
FLUSH PRIVILEGES;
初始化数据库表:
# 下载 Azkaban SQL 脚本
wget https://raw.githubusercontent.com/azkaban/azkaban/master/azkaban-db/src/main/sql/create.all.sql
# 执行 SQL 脚本
# 注意:需要根据虚谷数据库语法调整 SQL 脚本
编辑 conf/azkaban.properties:
# Azkaban Executor 配置
azkaban.name=Azkaban
azkaban.label=Azkaban Executor
azkaban.default.timezone=Asia/Shanghai
# 数据库配置(虚谷数据库)
database.type=mysql
mysql.port=5138
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=SYSDBA
mysql.password=SYSDBA
mysql.numconnections=100
# 驱动配置
mysql.driver=com.xugu.cloudjdbc.Driver
mysql.url=jdbc:xugu://127.0.0.1:5138/azkaban?current_schema=SYSDBA&CHAR_SET=UTF8
# 执行服务器配置
executor.port=12321
executor.maxThreads=50
executor.flow.threads=30
# 日志配置
executor.log.cleanup.interval.ms=604800000
executor.log.retention.ms=604800000
编辑 conf/azkaban.properties:
# Azkaban Web 配置
azkaban.name=Azkaban
azkaban.label=Azkaban Web Server
azkaban.default.timezone=Asia/Shanghai
# 数据库配置(虚谷数据库)
database.type=mysql
mysql.port=5138
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=SYSDBA
mysql.password=SYSDBA
mysql.numconnections=100
# 驱动配置
mysql.driver=com.xugu.cloudjdbc.Driver
mysql.url=jdbc:xugu://127.0.0.1:5138/azkaban?current_schema=SYSDBA&CHAR_SET=UTF8
# Web 服务器配置
server.port=8081
server.ssl.enabled=false
jetty.maxThreads=25
# 用户配置
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# 邮件配置(可选)
mail.sender=azkaban@example.com
mail.host=smtp.example.com
mail.user=azkaban@example.com
mail.password=***
启动执行服务器:
cd azkaban-exec-server-3.90.0
bin/start-exec.sh
# 检查状态
curl http://localhost:12321/status
启动 Web 服务器:
cd azkaban-web-server-3.90.0
bin/start-web.sh
# 访问 Web 界面
# http://localhost:8081
创建 flow.project 文件:
# 项目配置
project.name=my-project
project.description=My Azkaban Project
创建 flow.flow 文件:
---
config:
param1: "value1"
param2: "value2"
nodes:
- name: jobA
type: command
config:
command: echo "Hello from Job A"
- name: jobB
type: command
config:
command: echo "Hello from Job B"
dependsOn:
- jobA
- name: jobC
type: command
config:
command: echo "Hello from Job C"
dependsOn:
- jobB
Command 作业:
- name: myCommandJob
type: command
config:
command: echo "Hello World"
working.dir: /path/to/working/dir
env.PATH: /usr/local/bin:$PATH
failure.emails: admin@example.com
success.emails: admin@example.com
Java 作业:
- name: myJavaJob
type: javaprocess
config:
java.class: com.example.MyJob
classpath: ./lib/*
Xms: 64M
Xmx: 256M
main.args: arg1 arg2
Hadoop 作业:
- name: myHadoopJob
type: hadoop
config:
jobtype: java
work-path: /path/to/work
classpath: ./lib/*
java.class: com.example.HadoopJob
force.failure.overwrite: true
Spark 作业:
- name: mySparkJob
type: spark
config:
master: yarn
mode: cluster
class: com.example.SparkJob
jar: ./lib/spark-job.jar
driver-memory: 2g
executor-memory: 4g
num-executors: 10
nodes:
- name: checkCondition
type: command
config:
command: |
if [ "$(date +%u)" -lt 6 ]; then
echo "status=0" > ./shared/condition.properties
else
echo "status=1" > ./shared/condition.properties
fi
- name: weekdayJob
type: command
config:
command: echo "Weekday job"
dependsOn:
- checkCondition
condition: ${status} == 0
- name: weekendJob
type: command
config:
command: echo "Weekend job"
dependsOn:
- checkCondition
condition: ${status} == 1
通过 Web 界面配置:
Cron 表达式示例:
# 每天凌晨 2 点执行
0 0 2 * * ?
# 每小时执行一次
0 0 * * * ?
# 每周一上午 9 点执行
0 0 9 ? * MON
# 每月 1 日凌晨 1 点执行
0 0 1 1 * ?
创建调度:
curl -X POST "http://localhost:8081/schedule" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "session.id=YOUR_SESSION_ID" \
-d " projectName=my-project" \
-d "flow=my-flow" \
-d "scheduleTime=0,0,2,*,*,?" \
-d "scheduleDate=2024/01/01" \
-d "period=1d"
取消调度:
curl -X POST "http://localhost:8081/cancelSchedule" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "session.id=YOUR_SESSION_ID" \
-d "scheduleId=SCHEDULE_ID"
执行工作流:
curl -X POST "http://localhost:8081/executor" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "session.id=YOUR_SESSION_ID" \
-d "ajax=executeFlow" \
-d "project=my-project" \
-d "flow=my-flow"
添加虚谷数据库驱动:
# 将虚谷数据库 JDBC 驱动复制到 Azkaban lib 目录
cp xugu-jdbc-*.jar azkaban-exec-server/lib/
cp xugu-jdbc-*.jar azkaban-web-server/lib/
优化连接池参数:
# 连接池配置
mysql.numconnections=100
mysql.max.connections=200
mysql.connection.timeout=60000
mysql.idle.timeout=600000
mysql.max.age=3600000
创建表结构:
-- 执行服务器表
CREATE TABLE executors (
id INT NOT NULL PRIMARY KEY,
host VARCHAR(128) NOT NULL,
port INT NOT NULL,
active BOOLEAN DEFAULT TRUE,
ssl_port INT,
last_active_time BIGINT,
UNIQUE (host, port)
);
-- 执行流表
CREATE TABLE execution_flows (
exec_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
version INT NOT NULL,
flow_id VARCHAR(128) NOT NULL,
status VARCHAR(32),
submit_user VARCHAR(64),
submit_time BIGINT,
start_time BIGINT,
end_time BIGINT,
flow_type VARCHAR(32),
dispatch_method SMALLINT DEFAULT 0,
executor_id INT,
use_executor BOOLEAN DEFAULT FALSE,
nested_id VARCHAR(64),
flow_data BLOB,
FOREIGN KEY (project_id) REFERENCES projects(id)
);
-- 执行作业表
CREATE TABLE execution_jobs (
exec_id INT NOT NULL,
project_id INT NOT NULL,
version INT NOT NULL,
flow_id VARCHAR(128) NOT NULL,
job_id VARCHAR(128) NOT NULL,
attempt INT DEFAULT 0,
start_time BIGINT,
end_time BIGINT,
status VARCHAR(32),
input_params BLOB,
output_params BLOB,
attachments BLOB,
PRIMARY KEY (exec_id, job_id, attempt),
FOREIGN KEY (exec_id) REFERENCES execution_flows(exec_id)
);
-- 项目表
CREATE TABLE projects (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
active BOOLEAN DEFAULT TRUE,
modified_time BIGINT NOT NULL,
create_time BIGINT NOT NULL,
version BIGINT,
last_modified_user VARCHAR(64),
description VARCHAR(2048),
enc_type TINYINT,
settings_blob BLOB,
UNIQUE (name)
);
-- 项目版本表
CREATE TABLE project_versions (
project_id INT NOT NULL,
version INT NOT NULL,
upload_time BIGINT NOT NULL,
uploader VARCHAR(64),
file_type VARCHAR(16),
file_name VARCHAR(128),
md5 BLOB,
num_chunks INT,
resource_id VARCHAR(512),
PRIMARY KEY (project_id, version),
FOREIGN KEY (project_id) REFERENCES projects(id)
);
-- 项目文件表
CREATE TABLE project_files (
project_id INT NOT NULL,
version INT NOT NULL,
chunk INT,
size INT,
file BLOB,
PRIMARY KEY (project_id, version, chunk),
FOREIGN KEY (project_id) REFERENCES projects(id)
);
-- 项目权限表
CREATE TABLE project_permissions (
project_id VARCHAR(64) NOT NULL,
modified_time BIGINT NOT NULL,
name VARCHAR(64) NOT NULL,
permissions VARCHAR(16) NOT NULL,
isGroup BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (project_id, name, isGroup)
);
-- 调度表
CREATE TABLE schedules (
schedule_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
project_name VARCHAR(64) NOT NULL,
flow_name VARCHAR(128) NOT NULL,
status VARCHAR(16),
first_sched_time BIGINT,
next_exec_time BIGINT,
period VARCHAR(16),
cron_expression VARCHAR(128),
execution_options BLOB,
CONSTRAINT schedule_project FOREIGN KEY (project_id) REFERENCES projects(id)
);
-- 触发器表
CREATE TABLE triggers (
trigger_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
trigger_source VARCHAR(128),
trigger_source_id INT,
modified_time BIGINT NOT NULL,
creation_time BIGINT NOT NULL,
last_modify_time BIGINT NOT NULL,
status VARCHAR(16),
priority SMALLINT,
enc_type TINYINT,
trigger_data BLOB
);
-- 执行器日志表
CREATE TABLE executor_events (
executor_id INT NOT NULL,
event_type SMALLINT,
event_time BIGINT,
username VARCHAR(64),
message VARCHAR(512),
PRIMARY KEY (executor_id, event_time)
);
-- 项目事件表
CREATE TABLE project_events (
project_id INT NOT NULL,
event_type SMALLINT,
event_time BIGINT,
username VARCHAR(64),
message VARCHAR(512),
PRIMARY KEY (project_id, event_time)
);
-- 作业执行日志表
CREATE TABLE job_logs (
exec_id INT NOT NULL,
name VARCHAR(128),
attempt INT,
enc_type TINYINT,
start_byte INT,
end_byte INT,
log BLOB,
upload_time BIGINT,
PRIMARY KEY (exec_id, name, attempt, start_byte)
);
-- 活动执行流表
CREATE TABLE active_executing_flows (
exec_id INT NOT NULL,
update_time BIGINT,
PRIMARY KEY (exec_id)
);
访问 Azkaban Web 界面:
http://localhost:8081azkabanazkaban监控功能:
获取执行状态:
curl "http://localhost:8081/executor?ajax=fetchexecflow&execid=EXEC_ID"
获取作业日志:
curl "http://localhost:8081/executor?ajax=fetchJobLogs&execid=EXEC_ID&jobId=JOB_ID&attempt=0&offset=0&length=100000"
获取执行统计:
curl "http://localhost:8081/executor?ajax=fetchFlowExecutions&project=PROJECT_NAME&flow=FLOW_NAME&start=0&length=10"
配置日志级别:
# 在 conf/azkaban.properties 中配置
log4j.rootLogger=INFO, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 特定包日志级别
log4j.logger.azkaban=INFO
log4j.logger.org.apache.velocity=WARN
log4j.logger.org.mortbay.log=WARN
索引优化:
-- 为常用查询字段创建索引
CREATE INDEX idx_execution_flows_project_id ON execution_flows(project_id);
CREATE INDEX idx_execution_flows_status ON execution_flows(status);
CREATE INDEX idx_execution_flows_submit_time ON execution_flows(submit_time);
CREATE INDEX idx_execution_jobs_exec_id ON execution_jobs(exec_id);
CREATE INDEX idx_schedules_next_exec_time ON schedules(next_exec_time);
查询优化:
# 连接池优化
mysql.numconnections=100
mysql.max.connections=200
mysql.connection.timeout=60000
mysql.idle.timeout=600000
mysql.max.age=3600000
线程池配置:
# 执行服务器线程池
executor.maxThreads=50
executor.flow.threads=30
executor.job.thread.count=10
# 内存配置
executor.Xms=512M
executor.Xmx=2G
executor.MaxPermSize=256M
Jetty 配置:
# Jetty 服务器配置
server.port=8081
server.ssl.enabled=false
jetty.maxThreads=25
jetty.minThreads=5
jetty.acceptQueueSize=100
问题:无法连接到虚谷数据库。
解决方案:
# 检查数据库服务状态
systemctl status xugudb
# 检查连接配置
cat conf/azkaban.properties | grep mysql
# 测试数据库连接
java -cp "lib/*:extlib/*" com.xugu.cloudjdbc.Driver -url "jdbc:xugu://127.0.0.1:5138/SYSTEM" -user SYSDBA -password SYSDBA
问题:Azkaban 服务启动失败。
解决方案:
# 检查日志
tail -f logs/azkaban-exec-server.log
tail -f logs/azkaban-web-server.log
# 检查端口占用
netstat -tulpn | grep 8081
netstat -tulpn | grep 12321
# 检查 Java 版本
java -version
问题:作业执行失败。
解决方案:
# 检查作业日志
curl "http://localhost:8081/executor?ajax=fetchJobLogs&execid=EXEC_ID&jobId=JOB_ID&attempt=0&offset=0&length=100000"
# 检查执行器状态
curl "http://localhost:12321/status"
# 检查资源限制
ulimit -a
详细配置信息请参考:references/azkaban-configuration.md