DolphinScheduler Python SDK使用指南:API编程接口详解
·
DolphinScheduler Python SDK使用指南:API编程接口详解
概述
Apache DolphinScheduler Python SDK 是一个强大的编程接口,允许开发者通过Python代码与DolphinScheduler调度系统进行交互。通过Python SDK,您可以实现工作流的自动化创建、管理、执行和监控,为数据工程和ETL流程提供完整的编程控制能力。
核心功能特性
| 功能类别 | 具体功能 | 说明 |
|---|---|---|
| 工作流管理 | 创建工作流 | 支持动态创建工作流定义 |
| 更新工作流 | 修改现有工作流配置 | |
| 执行工作流 | 触发工作流实例执行 | |
| 项目管理 | 创建项目 | 管理项目空间 |
| 权限分配 | 用户项目权限管理 | |
| 资源管理 | 文件资源 | 管理文件资源信息 |
| 数据源 | 数据源连接管理 | |
| 任务管理 | 任务定义 | 创建和管理任务 |
| 依赖关系 | 设置任务依赖 |
环境配置与安装
前置要求
- Python 3.7+
- DolphinScheduler 3.1.5+
- Py4J 库(用于Java-Python通信)
连接配置
# 配置DolphinScheduler连接参数
ds_config = {
'gateway_server_address': '127.0.0.1',
'gateway_server_port': 25334,
'connect_timeout': 10000,
'read_timeout': 30000,
'auth_token': 'your_auth_token' # 可选认证令牌
}
核心API接口详解
1. 工作流管理接口
创建或更新工作流
def create_or_update_workflow(user_name, project_name, name, description,
global_params, schedule, online_schedule,
warning_type, warning_group_id, timeout,
worker_group, release_state, task_relation_json,
task_definition_json, other_params_json, execution_type):
"""
创建或更新工作流定义
参数:
user_name: 用户名
project_name: 项目名称
name: 工作流名称
description: 工作流描述
global_params: 全局参数JSON
schedule: 调度表达式(cron)
online_schedule: 是否在线调度
warning_type: 告警类型
warning_group_id: 告警组ID
timeout: 超时时间(秒)
worker_group: 工作组名称
release_state: 发布状态(0:下线,1:上线)
task_relation_json: 任务关系JSON
task_definition_json: 任务定义JSON
other_params_json: 其他参数JSON
execution_type: 执行类型
返回: 工作流代码
"""
执行工作流实例
def exec_workflow_instance(user_name, project_name, workflow_name,
cron_time, worker_group, warning_type,
warning_group_id, timeout):
"""
执行工作流实例
参数:
user_name: 用户名
project_name: 项目名称
workflow_name: 工作流名称
cron_time: 执行时间
worker_group: 工作组
warning_type: 告警类型
warning_group_id: 告警组ID
timeout: 超时时间
"""
2. 项目管理接口
创建或授权项目
def create_or_grant_project(user_name, name, description):
"""
创建项目或授权用户访问现有项目
参数:
user_name: 用户名
name: 项目名称
description: 项目描述
"""
查询项目信息
def query_project_by_name(user_name, project_name):
"""
按名称查询项目信息
返回: Project对象包含项目详情
"""
3. 用户和租户管理
用户管理
def create_user(user_name, user_password, email, phone,
tenant_code, queue, state):
"""
创建用户账户
参数:
user_name: 用户名
user_password: 密码
email: 邮箱
phone: 电话
tenant_code: 租户代码
queue: 队列
state: 状态
"""
租户管理
def create_tenant(tenant_code, description, queue_name):
"""
创建租户
返回: Tenant对象包含租户信息
"""
高级用法示例
完整的工作流创建流程
# 1. 创建项目
create_or_grant_project("admin", "data_pipeline", "数据管道项目")
# 2. 创建工作流定义
workflow_code = create_or_update_workflow(
user_name="admin",
project_name="data_pipeline",
name="daily_etl",
description="每日ETL数据处理流程",
global_params='{"param1":"value1"}',
schedule="0 0 2 * * ?", # 每天凌晨2点
online_schedule=True,
warning_type="NONE",
warning_group_id=1,
timeout=3600,
worker_group="default",
release_state=1, # 上线状态
task_relation_json=task_relations,
task_definition_json=task_definitions,
other_params_json="{}",
execution_type="PARALLEL"
)
# 3. 立即执行工作流
exec_workflow_instance(
user_name="admin",
project_name="data_pipeline",
workflow_name="daily_etl",
cron_time="now",
worker_group="default",
warning_type="NONE",
warning_group_id=1,
timeout=3600
)
任务依赖关系配置
# 任务关系JSON示例
task_relations = '''
{
"relations": [
{
"name": "extract_to_clean",
"preTaskCode": 123456789,
"postTaskCode": 987654321,
"conditionType": "AND",
"conditionParams": {}
}
]
}
'''
错误处理与调试
常见错误代码
| 错误代码 | 错误描述 | 解决方案 |
|---|---|---|
| 50001 | 权限不足 | 检查用户权限配置 |
| 50002 | 项目不存在 | 确认项目名称正确 |
| 50003 | 工作流已存在 | 使用更新接口或修改名称 |
| 50004 | 参数格式错误 | 验证JSON格式 |
调试技巧
# 启用详细日志
import logging
logging.basicConfig(level=logging.DEBUG)
# 异常处理示例
try:
result = create_or_update_workflow(...)
except Exception as e:
print(f"操作失败: {e}")
# 记录详细错误信息
logging.error(f"详细错误: {e.__class__.__name__}: {e}")
性能优化建议
批量操作优化
# 批量生成任务代码
def batch_gen_task_codes(gen_num):
"""
批量生成任务代码,减少API调用次数
"""
return gen_task_code_list(gen_num)
# 批量创建工作流
def batch_create_workflows(workflow_configs):
results = []
for config in workflow_configs:
result = create_or_update_workflow(**config)
results.append(result)
return results
连接池管理
# 实现连接池管理
class DSPythonClient:
def __init__(self, config):
self.config = config
self.connection_pool = []
def get_connection(self):
# 从连接池获取或创建新连接
pass
def release_connection(self, conn):
# 释放连接到池中
pass
安全最佳实践
认证与授权
# 使用安全令牌
secure_config = {
'auth_token': 'secure_random_token_12345',
'ssl_enabled': True,
'cert_verification': True
}
# 权限验证装饰器
def require_permission(permission_level):
def decorator(func):
def wrapper(*args, **kwargs):
# 验证用户权限
if not has_permission(kwargs.get('user_name'), permission_level):
raise PermissionError("权限不足")
return func(*args, **kwargs)
return wrapper
return decorator
监控与告警集成
执行状态监控
def monitor_workflow_execution(workflow_code, timeout=300):
"""
监控工作流执行状态
"""
start_time = time.time()
while time.time() - start_time < timeout:
status = get_workflow_status(workflow_code)
if status == "SUCCESS":
return True
elif status == "FAILED":
raise Exception("工作流执行失败")
time.sleep(10)
raise TimeoutError("工作流执行超时")
总结
DolphinScheduler Python SDK 提供了完整的编程接口,使得工作流管理变得自动化和可编程。通过合理使用这些API,您可以:
- 实现CI/CD集成:将工作流部署与代码部署流程结合
- 构建动态工作流:根据运行时条件生成不同的工作流配置
- 批量操作管理:高效处理大量工作流和任务
- 监控自动化:实现执行状态的自动监控和告警
掌握Python SDK的使用,将极大提升您在数据工程和任务调度方面的工作效率。
下一步学习建议:
- 深入学习具体任务类型的配置方法
- 探索高级调度策略和依赖管理
- 了解集群部署和高可用配置
- 实践与其他数据工具的集成方案
更多推荐

所有评论(0)