Apache DolphinScheduler 1.2.0 task 任务存储结构说明
本文章经授权转载
Table of Contents
任务总体存储
Shell节点
SQL节点
存储过程节点
SPARK节点
MapReduce(MR)节点
Python节点
Flink节点
HTTP节点
子流程节点
依赖(DEPENDENT)节点
任务总体存储
在调度平台所创建的所有任务都保存在 t_ds_process_definition 表中。
该数据库表结构如下表所示:
序号 | 字段 | 类型 | 注释 |
---|---|---|---|
1 | id | int | 主键 |
2 | name | varchar | 流程定义名称 |
3 | version | int | 流程定义版本 |
4 | release_state | tinyint | 流程定义的发布状态:0 未上线 1已上线 |
5 | project_id | int | 项目id |
6 | user_id | int | 流程定义所属用户id |
7 | process_definition_json | longtext | 流程定义json串 |
8 | description | text | 流程定义描述 |
9 | global_params | text | 全局参数 |
10 | flag | tinyint | 流程是否可用:0 不可用,1 可用 |
11 | locations | text | 节点坐标信息 |
12 | connects | text | 节点连线信息 |
13 | receivers | text | 收件人 |
14 | receivers_cc | text | 抄送人 |
15 | create_time | datetime | 创建时间 |
16 | timeout | int | 超时时间 |
17 | tenant_id | int | 租户id |
18 | update_time | datetime | 更新时间 |
其中 process_definition_json 字段为核心字段, 定义了 DAG 图中的任务信息.该数据以 JSON 的方式进行存储。
公共的数据结构如下表:
序号 | 字段 | 类型 | 注释 |
---|---|---|---|
1 | globalParams | Array | 全局参数 |
2 | tasks | Array | 流程中的任务集合[各个类型的结构请参考如下章节] |
3 | tenantId | int | 租户id |
4 | timeout | int | 超时时间 |
数据示例:
{
"globalParams": [
{
"prop": "golbal_bizdate",
"direct": "IN",
"type": "VARCHAR",
"value": "${system.biz.date}"
}
],
"tasks": [{}],
"tenantId": -1,
"timeout": 0
}
Shell节点
Shell节点,在worker执行的时候,会生成一个临时Shell脚本,使用租户同名的linux用户执行这个脚本。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: SHELL | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | resourceList | 引用资源文件 | ||
6 | localParams | 本地变量 | ||
7 | rawScript | Shell脚本 | ||
8 | description | 描述 | ||
9 | runFlag | 运行标识 | ||
10 | dependence | 任务依赖 | 与params互斥 | |
11 | maxRetryTimes | 最大重试次数 | ||
12 | retryInterval | 重试间隔 | ||
13 | timeout | 超时控制 | ||
14 | taskInstancePriority | 任务优先级 | ||
15 | workerGroupId | Worker 分组 | ||
16 | preTasks | 前置任务 |
数据示例:
{
"type": "SHELL",
"id": "tasks-17761",
"name": "shell-task",
"params": {
"resourceList": [
{
"res": "spark-examples_2.11-2.4.4.jar"
},
{
"res": "hadoop-mapreduce-examples-2.7.4.jar"
}
],
"localParams": [
{
"prop": "local_param",
"direct": "IN",
"type": "VARCHAR",
"value": "global_bizdate"
}
],
"rawScript": "echo \"thisisashelltask: ${local_param}\""
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
SQL节点
通过 SQL 对指定的数据源进行数据查询、更新操作。
节点定义结构如下。
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: SQL | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | type | 数据库类型 | ||
6 | datasource | 数据源 | ||
7 | sql | Sql脚本 | ||
8 | udfs | Udf 函数 | ||
9 | sqlType | SQL 类型 | 0 查询 1 非查询 | |
10 | title | 邮件标题 | ||
11 | receivers | 邮件接收人 | ||
12 | receiversCc | 邮件抄送人 | ||
13 | showType | 接收类型 | TABLE 表格ATTACHMENT附件 | |
14 | localParams | 本地变量 | ||
15 | connParams | 连接参数 | ||
16 | preStatements | 前置 SQL | ||
17 | postStatements | 后置 SQL | ||
18 | description | 描述 | ||
19 | runFlag | 运行标识 | ||
20 | dependence | 任务依赖 | 与params互斥 | |
21 | maxRetryTimes | 最大重试次数 | ||
22 | retryInterval | 重试间隔 | ||
23 | timeout | 超时控制 | ||
24 | taskInstancePriority | 任务优先级 | ||
25 | workerGroupId | Worker 分组 | ||
26 | preTasks | 前置任务 |
数据示例:
{
"type": "SQL",
"id": "tasks-17811",
"name": "SQL节点",
"params": {
"type": "MYSQL",
"datasource": 2,
"sql": "show databases;",
"udfs": "",
"sqlType": "0",
"title": "SQL节点",
"receivers": "zhangboyi_mx@163.com",
"receiversCc": "",
"showType": "TABLE,ATTACHMENT",
"localParams": [],
"connParams": "",
"preStatements": [
"select user();"
],
"postStatements": [
"select database();"
]
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
存储过程节点
根据选择的数据源,执行存储过程。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: PROCEDURE | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | type | 数据库类型 | ||
6 | datasource | 数据源 ID | ||
7 | method | 方法名 | ||
8 | localParams | 存储过程参数 | ||
9 | description | 描述 | ||
10 | runFlag | 运行标识 | ||
11 | dependence | 任务依赖 | 与params互斥 | |
12 | maxRetryTimes | 最大重试次数 | ||
13 | retryInterval | 重试间隔 | ||
14 | timeout | 超时控制 | ||
15 | taskInstancePriority | 任务优先级 | ||
16 | workerGroupId | Worker 分组 | ||
17 | preTasks | 前置任务 |
数据示例:
{
"type": "PROCEDURE",
"id": "tasks-33589",
"name": "存储过程节点",
"params": {
"type": "MYSQL",
"datasource": 2,
"method": "add",
"localParams": [
{
"prop": "in_paramer",
"direct": "IN",
"type": "VARCHAR",
"value": ""
},
{
"prop": "out_paramer",
"direct": "OUT",
"type": "VARCHAR",
"value": ""
}
]
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
SPARK节点
通过SPARK节点,可以直接直接执行SPARK程序,对于spark节点,worker会使用spark-submit方式提交任务。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: SPARK | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | mainClass | 运行主类 | ||
6 | mainJar | 程序 jar 包 | ||
7 | deployMode | 部署模式 | ||
8 | resourceList | 引用资源文件 | ||
9 | localParams | 本地变量 | ||
10 | driverCores | driver核数 | ||
11 | driverMemory | driver 内存数 | ||
12 | numExecutors | executor数量 | ||
13 | executorMemory | executor内存 | ||
14 | executorCores | executor核数 | ||
15 | mainArgs | 主参数 | ||
16 | others | 其他参数 | ||
17 | programType | 程序类型 | ||
18 | sparkVersion | Spark 版本 | ||
19 | description | 描述 | ||
20 | runFlag | 运行标识 | ||
21 | dependence | 任务依赖 | 与params互斥 | |
22 | maxRetryTimes | 最大重试次数 | ||
23 | retryInterval | 重试间隔 | ||
24 | timeout | 超时控制 | ||
25 | taskInstancePriority | 任务优先级 | ||
26 | workerGroupId | Worker 分组 | ||
27 | preTasks | 前置任务 |
数据示例:
{
"type": "SPARK",
"id": "tasks-46459",
"name": "SPARK节点",
"params": {
"mainClass": "org.apache.spark.examples.SparkPi",
"mainJar": {
"res": "spark-examples_2.11-2.4.4.jar"
},
"deployMode": "cluster",
"resourceList": [
{
"res": "spark-examples_2.11-2.4.4.jar"
}
],
"localParams": [],
"driverCores": 1,
"driverMemory": "512M",
"numExecutors": 2,
"executorMemory": "2G",
"executorCores": 2,
"mainArgs": "10",
"others": "",
"programType": "SCALA",
"sparkVersion": "SPARK2"
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
MapReduce(MR)节点
使用MR节点,可以直接执行MR程序。对于mr节点,worker会使用hadoop jar方式提交任务。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: MR | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | mainClass | 运行主类 | ||
6 | mainJar | 程序 jar 包 | ||
7 | resourceList | 引用资源文件 | ||
8 | mainArgs | 主参数 | ||
9 | others | 其他参数 | ||
10 | programType | 程序类型 | ||
11 | description | 描述 | ||
12 | runFlag | 运行标识 | ||
13 | dependence | 任务依赖 | 与params互斥 | |
14 | maxRetryTimes | 最大重试次数 | ||
15 | retryInterval | 重试间隔 | ||
16 | timeout | 超时控制 | ||
17 | taskInstancePriority | 任务优先级 | ||
18 | workerGroupId | Worker 分组 | ||
19 | preTasks | 前置任务 |
数据示例:
{
"type": "MR",
"id": "tasks-70322",
"name": "MapReduce(MR)节点",
"params": {
"mainClass": "wordcount",
"mainJar": {
"res": "hadoop-mapreduce-examples-2.7.4.jar"
},
"resourceList": [
{
"res": "hadoop-mapreduce-examples-2.7.4.jar"
}
],
"localParams": [],
"mainArgs": "/wordcount/input /wordcount/output/result",
"others": "",
"programType": "JAVA"
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
Python节点
使用Python节点,可以直接执行python脚本,对于python节点,worker会使用python **方式提交任务。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: PYTHON | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | resourceList | 引用资源文件 | ||
6 | localParams | 本地变量 | ||
7 | rawScript | Python脚本 | ||
8 | description | 描述 | ||
9 | runFlag | 运行标识 | ||
10 | dependence | 任务依赖 | 与params互斥 | |
11 | maxRetryTimes | 最大重试次数 | ||
12 | retryInterval | 重试间隔 | ||
13 | timeout | 超时控制 | ||
14 | taskInstancePriority | 任务优先级 | ||
15 | workerGroupId | Worker 分组 | ||
16 | preTasks | 前置任务 |
数据示例:
{
"type": "PYTHON",
"id": "tasks-23887",
"name": " Python节点",
"params": {
"resourceList": [
{
"res": "hadoop-mapreduce-examples-2.7.4.jar"
},
{
"res": "spark-examples_2.11-2.4.4.jar"
}
],
"localParams": [],
"rawScript": "print(\"this is python task ..\")"
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
Flink节点
根据配置调用 Flink 请求。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: FLINK | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | mainClass | 运行主类 | ||
6 | mainJar | 程序 jar 包 | ||
7 | deployMode | 部署模式 | ||
8 | resourceList | 引用资源文件 | ||
9 | localParams | 本地变量 | ||
10 | slot | Slot数量 | ||
11 | taskManager | taskManager数量 | ||
12 | taskManagerMemory | taskManager内存 | ||
13 | jobManagerMemory | jobManager内存 | ||
14 | executorCores | executor核数 | ||
15 | mainArgs | 主参数 | ||
16 | others | 其他参数 | ||
17 | programType | 程序类型 | ||
18 | sparkVersion | Spark 版本 | ||
19 | description | 描述 | ||
20 | runFlag | 运行标识 | ||
21 | dependence | 任务依赖 | 与params互斥 | |
22 | maxRetryTimes | 最大重试次数 | ||
23 | retryInterval | 重试间隔 | ||
24 | timeout | 超时控制 | ||
25 | taskInstancePriority | 任务优先级 | ||
26 | workerGroupId | Worker 分组 | ||
27 | preTasks | 前置任务 |
数据示例:
{
"type": "FLINK",
"id": "tasks-84250",
"name": "Flink节点",
"params": {
"mainClass": "org.apache.spark.examples.SparkPi",
"mainJar": {
"res": "spark-examples_2.11-2.4.4.jar"
},
"deployMode": "cluster",
"resourceList": [],
"localParams": [],
"slot": 1,
"taskManager": "2",
"jobManagerMemory": "1G",
"taskManagerMemory": "2G",
"executorCores": 2,
"mainArgs": "10",
"others": "",
"programType": "SCALA"
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
HTTP节点
根据配置调用 HTTP 请求。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: HTTP | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | localParams | 本地变量 | ||
6 | httpParams | 请求参数 | ||
7 | url | url 地址 | ||
8 | httpMethod | 请求方式 | ||
9 | httpCheckCondition | 检查条件 | ||
10 | condition | 检查内容 | ||
11 | description | 描述 | ||
12 | runFlag | 运行标识 | ||
13 | dependence | 任务依赖 | 与params互斥 | |
14 | maxRetryTimes | 最大重试次数 | ||
15 | retryInterval | 重试间隔 | ||
16 | timeout | 超时控制 | ||
17 | taskInstancePriority | 任务优先级 | ||
18 | workerGroupId | Worker 分组 | ||
19 | preTasks | 前置任务 |
数据示例:
{
"type": "HTTP",
"id": "tasks-31113",
"name": "http节点",
"params": {
"localParams": [],
"httpParams": [
{
"prop": "id",
"httpParametersType": "PARAMETER",
"value": "GRESFWW"
}
],
"url": "http://www.ysstech.com/",
"httpMethod": "GET",
"httpCheckCondition": "STATUS_CODE_DEFAULT",
"condition": ""
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
子流程节点
子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: SUB_PROCESS | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | Json 格式 | |
5 | processDefinitionId | 流程定义 ID | ||
6 | description | 描述 | ||
7 | runFlag | 运行标识 | ||
8 | dependence | 任务依赖 | 与params互斥 | |
9 | maxRetryTimes | 最大重试次数 | ||
10 | retryInterval | 重试间隔 | ||
11 | timeout | 超时控制 | ||
12 | taskInstancePriority | 任务优先级 | ||
13 | workerGroupId | Worker 分组 | ||
14 | preTasks | 前置任务 | ||
15 | ||||
16 |
数据示例:
{
"type": "SUB_PROCESS",
"id": "tasks-22568",
"name": "子流程节点-task",
"params": {
"processDefinitionId": 2
},
"description": "",
"runFlag": "NORMAL",
"dependence": {},
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
依赖(DEPENDENT)节点
依赖节点,就是依赖检查节点。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。
节点定义结构如下:
序号 | 参数名 | 描述 | 备注 | |
---|---|---|---|---|
1 | type | 类型 | 值: DEPENDENT | |
2 | id | 任务编码 | ||
3 | name | 名称 | ||
4 | params | 自定义参数 | ||
5 | description | 描述 | ||
6 | runFlag | 运行标识 | ||
7 | dependence | 任务依赖 | 与params互斥 | |
8 | relation | 关系 | ||
9 | dependTaskList | 依赖任务清单 | ||
10 | maxRetryTimes | 最大重试次数 | ||
11 | retryInterval | 重试间隔 | ||
12 | timeout | 超时控制 | ||
13 | taskInstancePriority | 任务优先级 | ||
14 | workerGroupId | Worker 分组 | ||
15 | preTasks | 前置任务 |
数据示例:
{
"type": "DEPENDENT",
"id": "tasks-3383",
"name": " 依赖(DEPENDENT)节点",
"params": {},
"description": "",
"runFlag": "NORMAL",
"dependence": {
"relation": "AND",
"dependTaskList": [
{
"relation": "AND",
"dependItemList": [
{
"projectId": 2,
"definitionId": 3,
"definitionList": [
{
"value": 3,
"label": "子流程节点"
},
{
"value": 2,
"label": "shell-task"
}
],
"depTasks": "ALL",
"cycle": "day",
"dateValue": "today"
}
]
}
]
},
"maxRetryTimes": "0",
"retryInterval": "1",
"timeout": {
"strategy": "",
"interval": null,
"enable": false
},
"taskInstancePriority": "MEDIUM",
"workerGroupId": -1,
"preTasks": []
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)