Apache DolphinScheduler 任务参数完整指南:默认任务参数与资源配额机制深度解析

发布时间:2026/9/15 17:05:30
Apache DolphinScheduler 任务参数完整指南:默认任务参数与资源配额机制深度解析 Apache DolphinScheduler 任务参数完整指南默认任务参数与资源配额机制深度解析【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler本指南以 Apache DolphinScheduler 的任务参数附录Task Parameters Appendix为核心系统讲解工作流中每个任务节点通用的默认参数——从节点名称、运行标志、任务优先级到 CPU 配额、内存上限、超时告警与延迟执行等 15 项核心配置。文章不仅逐项说明每个参数的含义、取值范围与配置方式还结合仓库源码揭示任务定义的数据模型、资源配额在 Worker 端的底层实现机制帮助你准确配置任务节点、避免资源滥用并为任务调度排障提供源码级依据。一、任务参数附录概述在 DolphinScheduler 中每一种任务插件Shell、SQL、Python、DataX、Flink、Spark 等都共享一组通用默认参数。这组参数定义在 docs/docs/en/guide/task/appendix.md是理解任务节点配置的基础。关键点在于不同类型的任务会包含这组默认参数中的全部或部分参数。例如Shell 任务与 SQL 任务的参数面板会有差异但它们都遵循同一套默认参数语义。这些参数最终会随任务定义一起持久化到数据库中并在任务调度执行时被 Worker 读取使用。从源码结构看这组默认参数正是t_ds_task_definition表的字段映射。在 TaskDefinition.java 中任务定义实体被TableName(t_ds_task_definition)注解映射到对应数据库表其中name节点名称、description描述、flag运行标志、taskPriority任务优先级、workerGroupWorker 分组、failRetryTimes失败重试次数、failRetryInterval失败重试间隔、timeout超时时间、delayTime延迟执行时间、cpuQuotaCPU 配额、memoryMax最大内存等字段一一对应附录中列出的默认参数。二、任务通用默认参数逐项详解下表完整列出了附录中的全部默认参数及其官方释义参数说明Node Name任务节点的名称。同一工作流内节点名称必须唯一。Run Flag是否调度执行该任务。若无需执行该任务可打开禁止执行开关。Description描述该节点的功能。Task Priority当 Worker 线程数不足时Worker 按优先级执行任务两个任务优先级相同时按先来先服务first come first served方式执行。Worker Group执行任务的机器Worker 分组。选择default时调度器会将任务随机发送给某个 Worker。Task Group Name任务的资源组。不配置则不生效。Environment Name任务执行所依赖的环境。Number of Failed Retries任务失败时的重试次数。可通过下拉菜单选择或手动填写。Failure Retry Interval任务失败重试的时间间隔。可通过下拉菜单选择或手动填写。CPU Quota为执行的任务分配指定的 CPU 时间配额取百分比值。默认 -1 表示不限制。例如单核满载为 100%16 核满载为 1600%。可通过task.resource.limit.state配置开启详见架构配置文档。Max Memory为执行的任务分配指定的最大内存超过该限制会触发 OOM 被杀死且不会自动重试。取 MB 值。默认 -1 表示不限制。可通过task.resource.limit.state配置开启。Timeout Alarm任务超时告警。当任务超过超时阈值时会发送告警邮件。Delayed Execution Time任务延迟执行的时间单位为分钟。Resources任务节点所使用的资源文件。Predecessor Task当前任务节点的上游任务。2.1 节点名称Node Name与描述节点名称是任务在 DAG 中的唯一标识同一工作流内必须唯一否则工作流定义无法通过校验。描述字段用于说明节点职责便于团队协作与后期维护。从数据模型看name与description均以字符串形式存储于TaskDefinition实体中。此外TaskDefinition中还有code任务编码、version版本号字段——DolphinScheduler 对任务定义采用编码 版本的管理方式每次修改任务定义都会生成新的版本记录TaskDefinitionLog这也是任务可回溯、可回滚的底层机制。2.2 运行标志Run Flag与禁止执行运行标志控制任务是否参与调度执行。若你暂时不希望某个节点被执行例如临时下线一个已不再需要的步骤可以打开禁止执行开关。该标志在数据模型中对应TaskDefinition的flag字段类型为Flag枚举YES/NO并持久化到t_ds_task_definition.flag列。处于禁止执行状态的任务节点仍保留在工作流定义中便于日后恢复而无需重建节点。2.3 任务优先级Task Priority任务优先级决定资源竞争时的执行顺序当Worker 线程数不足时Worker 会依据优先级对排队中的任务进行排序优先执行高优先级任务当两个任务的优先级相同时按照first come first served先来先服务的原则执行该项与 process_priority.png 设计图 展示的工作流级优先级机制不同——此处是任务节点级的优先级二者分别在 DAG 编排与 Worker 执行两个层面影响调度顺序。在源码中TaskDefinition的taskPriority字段类型为Priority枚举HIGHEST、HIGH、MEDIUM、LOW、LOWEST优先级语义在任务实例TaskInstance层面继承并用于 Worker 端任务队列的排序。2.4 Worker 分组Worker GroupWorker 分组决定了任务由哪些机器执行是 DolphinScheduler 实现按需分配计算资源的核心手段选择default分组时调度器将任务随机发送给该分组内的某个 Worker你可以为不同租户、不同业务或不同资源规格如高内存机器、GPU 机器创建独立 Worker 分组将任务路由到特定机器池实现资源隔离与负载规划。在源码中workerGroup字段存储于任务定义中调度时会结合 Worker 分组注册信息与分组内 Worker 的负载情况将任务派发到目标 Worker。2.5 任务组Task Group Name与任务组优先级任务组Task Group是 DolphinScheduler 的资源组机制用于对任务的并发执行数量进行总量控制。配置任务组后任务会受该组配额约束不配置则不生效。与之关联的是TaskDefinition中的taskGroupId与taskGroupPriority字段。任务组机制让多个任务共享一个并发额度池例如某组最多允许 10 个任务同时运行超出部分排队等待从而保护下游系统不被瞬间打满。2.6 环境名称Environment Name环境用于预置任务运行所需的运行时依赖例如自定义的 Python 虚拟环境路径特定的 JDK 或大数据客户端版本预先配置的环境变量集合。任务被派发到 Worker 后Worker 会加载任务指定的环境对应environmentCode关联的环境定义在对应环境中启动任务进程。2.7 失败重试次数与重试间隔任务执行失败时DolphinScheduler 支持自动重试包含两个参数Number of Failed Retries失败重试次数可通过下拉菜单选择或手动填写Failure Retry Interval两次重试之间的等待间隔。在数据模型中二者对应TaskDefinition的failRetryTimes与failRetryInterval字段int 类型。这两个参数同时出现在equals()方法中——意味着修改重试策略会导致任务定义版本变化进而产生新的TaskDefinitionLog记录便于追溯任务的配置变更历史。需要注意附录明确指出因Max Memory最大内存超限被 OOM Kill 的任务不会自动重试这是重试机制的一个重要例外配置高内存敏感型任务时务必留意。2.8 超时告警Timeout Alarm超时告警用于防止任务无限期挂起当任务执行时间超过设定的超时阈值时系统会触发超时策略附录所述为发送告警邮件TimeoutFlag开启 通知策略选择邮件告警。从源码看超时相关字段包括TaskDefinition中的timeoutFlagTimeoutFlag枚举是否启用超时、timeoutNotifyStrategyTaskTimeoutStrategy枚举超时后的处理策略以及timeout超时阈值单位为分钟。TaskTimeoutStrategy枚举支持多种组合策略例如仅警告WARN、仅失败FAILED或警告后失败WARNFAILED等你可以根据任务的重要性选择是仅告警还是告警并终止任务。2.9 延迟执行时间Delayed Execution Time延迟执行时间用于将任务在到达调度时间后再推迟指定的分钟数执行对应TaskDefinition.delayTime字段int单位分钟。典型的应用场景包括依赖外部系统数据落盘后再执行本任务错峰执行避免多个任务在同一时刻抢占资源模拟缓冲期让上游数据有充分的时间流转。2.10 资源Resources与前驱任务Predecessor TaskResources指定任务节点运行时需要引用的资源文件如 UDF 脚本、依赖 jar、SQL 文件等这些资源由文件管理中心统一管理任务执行时 Worker 会将其下载到本地。在实体中对应的resourceIds字段已在源码中被标记为Deprecated说明资源关联方式正在向更现代的引用机制演进。Predecessor Task即 DAG 中的上游任务节点。通过为当前节点指定前驱任务DolphinScheduler 才能构建出有向无环图DAG从而在运行时按依赖关系决定任务的启动时机前驱任务执行完成后当前任务才会进入就绪队列。三、CPU 配额与内存上限资源限制的底层实现附录中CPU Quota与Max Memory是技术含量最高的两个参数它们共同构成了 DolphinScheduler 的任务级资源隔离能力且都与全局开关task.resource.limit.state相关联。3.1 全局开关task.resource.limit.state该开关定义在 common.properties 中# Task resource limit state task.resource.limit.statefalse默认值为false即默认不开启任务资源限制当该开关为false时CPU Quota 与 Max Memory 配置不生效任务以无限制方式运行当设置为true时Worker 在启动任务时会依据任务配置的 CPU 配额与内存上限构建受限执行环境。测试资源文件 common.properties 中同样保留了task.resource.limit.statefalse的默认值保证测试环境与生产环境行为一致。3.2 数据模型与默认值兜底在任务定义实体 TaskDefinition.java 中cpuQuota与memoryMax被定义为Integer类型并通过 getter 方法做默认值兜底public Integer getCpuQuota() { return cpuQuota null ? -1 : cpuQuota; } public Integer getMemoryMax() { return memoryMax null ? -1 : memoryMax; }即当数据库中的值为 NULL 时统一按 -1 处理与附录中默认 -1 表示不限制的语义完全一致。这意味着即使老版本数据没有写入这两个字段系统也能以不限制的兼容行为正常运行。3.3 Worker 端的 systemd 资源控制实现任务执行时任务参数会流转到TaskExecutionContext见 TaskExecutionContext.java其中的cpuQuota与memoryMax字段被AbstractCommandExecutor读取并传递给 Shell 命令构建器iShellInterceptorBuilder.cpuQuota(taskRequest.getCpuQuota());核心实现位于 BaseLinuxShellInterceptorBuilder.java 的bootstrapCommandInResourceLimitMode()方法当资源限制开启时Worker 会使用sudo systemd-run --scope将任务进程放入独立的 systemd scope 中并通过控制组cgroup参数实施资源上限if (cpuQuota -1) { bootstrapCommand.add(-p); bootstrapCommand.add(CPUQuota); // 不限制 } else { bootstrapCommand.add(-p); bootstrapCommand.add(String.format(CPUQuota%s%%, cpuQuota)); // 例如 100% } if (memoryQuota -1) { bootstrapCommand.add(-p); bootstrapCommand.add(String.format(MemoryLimit%s, infinity)); // 不限制 } else { bootstrapCommand.add(-p); bootstrapCommand.add(String.format(MemoryLimit%sM, memoryQuota)); // 例如 2048M }由此可以明确几件重要事实CPU 配额的取值为百分比CPUQuota100%表示任务最多占用 1 个 CPU 核心的满载算力附录中16 核满载为 1600%即对应CPUQuota1600%内存上限的单位为 MBMemoryLimit2048M即限制任务最多使用 2048 MB 内存超限后果不同CPU 超限只是被节流throttle任务继续运行但变慢而内存超过MemoryLimit会触发 OOM 被系统杀死且不会自动重试与附录说明一致底层依赖 systemd该实现建立在 Linux systemd 的systemd-run与 cgroup 资源控制之上源码注释明确指向man systemd.resource-control因此资源限制能力在 Linux 系统上生效运行环境需具备sudo权限与 systemd 支持。3.4 一个完整的资源限制配置示例假设你有一个数据清洗任务希望将它限制在最多 2 核 CPU、4 GB 内存内运行在 common.properties 中开启全局开关task.resource.limit.statetrue在任务定义中配置CPU Quota200200% 2 个 CPU 核心满载Max Memory40964096 MB 4 GB保存并发布工作流。执行后Worker 会以sudo systemd-run --scope -p CPUQuota200% -p MemoryLimit4096M的方式启动任务进程任务的计算资源被严格限制在配额之内避免个别任务打满整台 Worker 机器、影响同机器上的其他任务。四、参数在任务定义与执行链路中的流转将上述参数串起来看一个任务节点从配置到执行的完整链路如下配置阶段用户在 UI 上配置上述默认参数参数随任务定义TaskDefinition持久化到t_ds_task_definition表每次修改都会产生一条新的TaskDefinitionLog版本记录派发阶段工作流调度器依据 DAG 依赖Predecessor Task、运行标志Run Flag与延迟时间Delayed Execution Time将就绪的任务实例按优先级Task Priority提交到指定 Worker 分组Worker Group的队列中执行阶段Worker 按优先级与先来先服务原则取出任务加载任务环境Environment Name与资源文件Resources在开启资源限制时通过 systemd scope 施加 CPU/Memory 配额后启动任务进程失败处理任务失败时按重试次数与间隔Number of Failed Retries / Failure Retry Interval自动重试超时时按超时策略Timeout Alarm发送告警或终止任务因内存超限被 OOM Kill 的任务不参与自动重试。从源码看TaskDefinition的equals()方法TaskDefinition.java对name、description、taskType、taskParams、flag、taskPriority、workerGroup、failRetryTimes、failRetryInterval、timeoutFlag、timeoutNotifyStrategy、environmentCode、taskGroupId、cpuQuota、memoryMax等字段逐一比较意味着以上任何默认参数的变更都会使任务定义产生新版本这一机制保证了每次配置调整都可追溯、可回滚。五、配置建议与注意事项同一工作流内节点名称必须唯一否则会破坏 DAG 定义的完整性临时不需要执行的任务优先使用禁止执行开关而非删除节点便于后续恢复资源敏感的共享 Worker 集群务必开启task.resource.limit.state并为任务设置合理的 CPU Quota 与 Max Memory防止单任务拖垮整个 Worker内存上限的配置要留有余量超过 Max Memory 的任务会被 OOM 杀死且不自动重试可能造成工作流整体失败因此阈值应高于任务实际内存峰值的合理冗余资源限制依赖 systemd 与 sudo该特性基于 Linuxsystemd-run实现要求 Worker 操作系统支持 systemd 且运行 DolphinScheduler 的用户具备相应 sudo 权限非 Linux 或受限容器环境可能无法生效任务组Task Group不配置则不生效如果需要限制某类任务的整体并发量应创建任务组并将任务关联到组内Worker 分组default为随机派发若任务对机器资源有特殊要求如大内存机器应创建独立 Worker 分组而非使用默认组。六、延伸阅读任务参数附录原文docs/docs/en/guide/task/appendix.md架构级配置说明含task.resource.limit.state的完整上下文架构配置文档任务定义实体与字段映射TaskDefinition.java全局配置默认值common.propertiesWorker 端资源限制实现BaseLinuxShellInterceptorBuilder.java任务执行上下文资源参数流转载体TaskExecutionContext.java【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考