全部产品
Search
文档中心

大数据开发治理平台 DataWorks:节点调度配置

更新时间:Sep 09, 2026

为DataWorks中的任务(节点)配置调度属性,包括调度周期、依赖关系、运行策略和参数,以确保任务按预期自动、可靠地执行。

核心概念

配置调度属性前,需理解以下核心概念:

  • 任务与实例:任务(或称节点)是在DataWorks中开发的业务逻辑代码。当任务依据其调度配置运行时,会生成一个或多个运行实例。在运维中心,管理和监控的是任务的运行实例,例如查看日志、重跑实例等。

  • 周期实例:对于周期性调度的任务,调度系统会根据其调度周期(如天、小时)生成对应的周期实例。例如,一个按小时调度的任务,每天会生成24个待运行的小时实例。

  • 业务时间:实例所处理的数据对应的时间,通常为T-1(昨天)。例如,一个在2023-01-02凌晨运行的实例,其业务时间是2023-01-01,代表该实例正在处理1月1日的数据。调度参数的替换通常基于业务时间进行。

前提条件

  • 已创建节点。DataWorks基于节点进行任务开发,不同类型的引擎任务在DataWorks上被封装为不同类型的节点,您可根据业务需要,选择合适的节点使用。详情请参见节点开发概述。

  • 已在工作空间的调度设置页面开启启用调度周期开关。开启后,该工作空间下的所有任务才能根据其配置自动调度运行。详情参见配置工作空间调度属性。

配置调度属性

在节点编辑页面右侧的调度配置面板中,设置各项属性以定义任务的自动化行为。

1. 进入调度配置页面

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到目标工作空间,单击操作列的快速进入> Data Studio,进入Data Studio。

  2. 在数据开发(Data Studio)界面,双击打开目标节点,进入其编辑页面。

  3. 单击节点编辑页面右侧的调度配置,打开配置面板。

2. 配置各项调度属性

调度配置面板包含调度时间、调度依赖、调度策略、调度参数、节点输出参数和关联角色等页签,根据业务需求进行配置。

调度时间:定义任务何时运行

定义任务何时、以何种频率自动执行。

说明

如果节点位于工作流内,其调度时间由工作流统一配置,此处不可修改。如果节点是独立节点,则需在此处单独配置。

参数

说明

调度周期

定义任务在生产环境多久自动执行一次。支持分钟、小时、日、周、月、年等多种周期。

  • 分钟调度:在每日指定时间段内,按设定的时间间隔(N分钟)重复运行,最小粒度为1分钟。

  • 小时调度:在每日指定时间段内,按设定的时间间隔(N小时)重复运行。

  • 日调度:每日在指定的定时时间运行一次。

  • 周调度:每周在指定的某几天、特定时间点运行一次。

  • 月调度:每月在指定的某几天、特定时间点运行一次。

  • 年调度:每年在指定的某几天、特定时间点运行一次。

生效日期

设置任务自动调度的起止日期。超过有效期后,任务将不再生成新的周期实例。

Cron表达式

该表达式根据界面上的时间属性配置自动生成,无需手动配置。

说明
  • 调度时间 vs. 实际运行时间:此处配置的调度时间为任务的预期开始时间。任务的实际启动时间还受上游任务完成情况、资源组资源是否充足等多种因素影响。

  • 非调度日的空跑机制:对于周、月、年调度的任务,在非指定的调度日期,系统会为其生成一个空跑实例。该实例会立即运行成功并触发下游任务,但自身不执行任何代码,也不消耗计算资源。

  • 调度频率的独立性:任务的调度频率仅由其自身的调度周期决定,与上游任务的周期无关。DataWorks支持不同调度周期的任务(如小时任务依赖天任务)之间建立依赖关系。

调度依赖:定义任务的执行前提

定义当前任务必须等待哪些上游任务成功完成后才能开始执行。正确配置依赖是保障数据加工顺序和产出准确性的关键。

DataWorks基于代码中的表血缘关系,自动解析并推荐上游依赖以确保数据完整性。也可根据业务需要手动添加或修改依赖。

image
配置上游依赖
  1. 在调度依赖页签,查看系统根据代码解析出的上游依赖节点列表。

  2. 为每个上游节点选择依赖方式:

    • 依赖同周期:下游今天(T)的实例,依赖上游今天(T)的实例。这是最常见的依赖关系。例如,日任务B读取日任务A产出的表,则B应依赖A的同周期。

    • 依赖上一周期:下游今天(T)的实例,依赖上游昨天(T-1)的实例。例如,今天的任务需要读取昨天产出的汇总数据。详情参见跨周期依赖。

  3. (可选)如果系统未能自动解析出依赖,或需要依赖一个非数据产出节点(如虚拟节点),可单击添加上游节点手动配置。

说明
  • 工作流依赖:工作流内的节点依赖关系由工作流统一管理。此处仅介绍单个节点的依赖配置。工作流的调度配置参见配置工作流调度属性。

  • 复杂依赖场景:DataWorks支持多种复杂的依赖场景。配置前,建议通过复杂依赖配置文档了解预设的依赖规则。

  • 不支持依赖的场景:对于非DataWorks周期调度产出的数据(如实时同步的表、手动上传的表、维表),系统无法感知其数据更新状态,因此无法配置调度依赖。在此类场景下,可将任务依赖工作空间根节点或虚拟节点,以实现统一的调度编排。

调度策略:定义任务的运行行为和资源

定义任务实例的生成方式、运行行为(如超时、重跑)和所需资源。

参数

说明

实例生成方式

定义任务发布后,周期实例何时开始生成。

  • T+1次日生成:(推荐)发布后的第二天开始自动调度。如需当天执行,需手动执行补数据操作。

  • 发布后即时生成:发布后当天即开始自动调度。详情参见发布后即时生成实例。

调度类型

  • 正常调度:任务正常执行,会运行代码并消耗资源。

  • 暂停调度:任务实例生成后状态置为“冻结”,不会执行,并会阻塞所有下游任务的执行。

  • 空跑调度:任务实例生成后立即成功,不执行代码,不消耗资源,但会正常触发下游任务执行。

超时定义

设置任务运行的最长时长。超过该时间后,任务将自动终止并置为失败。默认值为3~7天,手动设置最大可为168小时(7天)。

重跑属性

定义任务在何种状态下允许被手动重跑。

  • 运行成功或失败后均可重跑:适用于可重复执行且不影响结果的任务(幂等任务)。

  • 运行成功后不可重跑,运行失败后可重跑:适用于成功后重跑会产生副作用(如重复插入数据)的任务。

  • 运行成功或失败后均不可重跑:适用于任何重跑都会影响结果的敏感任务(如某些数据同步)。

    说明

    选择此项后,系统故障恢复后也不会自动重跑该任务,且无法开启失败自动重跑。

失败自动重跑

开启后,当任务因临时性问题(如网络抖动)运行失败时,系统会自动尝试重跑,以提升调度稳定性。

  • 重跑次数:可配置1-10次。

  • 重跑间隔:每次重跑的间隔时间,可配置1-30分钟。

说明

因超时而失败的任务不会触发自动重跑。

最大并行实例数

限制同一任务同时可运行的最大实例数,用于并发控制。取值范围为1-10000。开启后,超出数量的实例会排队等待,直到已有实例运行结束。

资源组

配置任务运行时使用的调度资源组。

计算资源/计算配额

配置任务运行所需的计算引擎资源(如MaxCompute Quota)。

数据集

为特定节点类型(如Shell)挂载数据集(如对象存储(OSS)或文件存储(NAS)),使其可以在代码中像本地文件一样访问。可配置挂载路径、高级配置(如读取方法)和只读权限。

参数配置:实现任务间动态传值

通过参数化配置,可以使任务代码更加灵活,实现任务间的动态传值和上下文传递。

调度参数(输入参数)

如果节点代码中使用了变量(例如 ${pt_time}),则需要在此处为其赋值。值可以是固定的常量,也可以是使用DataWorks内置参数(如 $bizdate)的动态表达式。

可通过添加参数手动定义,或通过加载代码中的参数自动识别。此外,还支持通过image图标将参数值与上游节点的输出参数进行绑定。

说明

调度参数的最终取值,由实例的业务时间以及配置的调度参数表达式共同决定。

最佳实践:任务发布后,建议在生产环境的运维中心 > 周期任务界面,检查并确认生产任务的调度参数配置符合预期。

节点输出参数(输出参数)

定义当前节点的输出,以键值对(Key-Value)的形式供下游节点引用。下游节点可在其调度参数配置中,通过绑定上游节点的输出参数来消费这些值。

输出参数的参数值可以是常量(固定字符串),也可以是变量(引用系统或自定义的输入参数)。

说明
  • 支持的节点类型:EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL和MySQL。

  • 传递查询结果:节点输出参数只能传递字符串值。如需将上游节点的SQL查询结果集传递给下游,请使用赋值节点。

关联角色:安全访问其他云资源

通过为任务指定一个RAM角色,使其在运行时能通过阿里云STS(Security Token Service)安全地获取临时访问凭证,从而访问其他云资源(如OSS),避免在代码中硬编码AccessKey,提升安全性。

重要

功能限制

  • 资源组限制:仅支持运行在Serverless 资源组的节点。

  • 节点类型限制:仅支持Python、Shell、Notebook、PyODPS 2、PyODPS 3和PAI DLC节点。

1. 在节点中配置关联角色
  1. 在节点编辑界面的右侧,找到并单击运行配置。

  2. 在调度配置面板中,切换到关联角色页签。

  3. 在RAM角色下拉框中,选择您准备好的 RAM 角色。

    重要

    如果下拉框为空,或找不到所需的角色,请参考配置关联角色(使用STS方式)访问其他云产品完成RAM角色配置。

  4. 配置完成后,提交节点。此配置仅对调试运行生效。

2. 运行与验证
重要

PyODPS:访问其他云产品(如OSS)时,使用您设置的 RAM 角色身份;但访问 MaxCompute 数据时,仍然自动使用计算资源(项目级别)配置的访问身份。

配置调度属性

节点完成调试后,需将运行配置中的关联角色同步至调度配置的关联角色 > RAM角色。发布后,任务将以该角色的身份运行。

若在运行配置中配置自定义镜像,需同步设置到调度配置中。

在运维中心查看执行角色

任务运行结束后,在运维中心查看任务实例的详细信息,以确认是否成功使用指定的角色。

  1. 进入运维中心 > 周期任务运维 > 周期实例。

  2. 找到您运行的节点实例,单击进入详情页。

  3. 在详情页中,查看执行身份字段,确认任务是否成功使用了指定的RAM角色。

3.(可选)查看或在代码中使用临时凭证

配置关联角色后,任务运行时会自动以该RAM角色身份访问其他云资源,通常无需在代码中显式获取凭证即可运行任务。

如果您需要在代码中显式使用临时凭证,或需要查看系统注入的临时凭证,可通过以下方式获取。DataWorks会在任务运行时自动获取临时凭证,并将其作为环境变量注入到运行环境中。

重要

PAI DLC节点不支持通过本节所述方式获取临时凭证。

方式一:读取环境变量(推荐 Shell, Python)

系统会自动设置以下三个环境变量,您可以直接在代码中读取。

  • LINKED_ROLE_ACCESS_KEY_ID:临时访问密钥 ID。

  • LINKED_ROLE_ACCESS_KEY_SECRET:临时访问密钥 Secret。

  • LINKED_ROLE_SECURITY_TOKEN:临时安全令牌。

代码示例 (Python):

重要

此案例在运行中需选择安装oss2的Python自定义镜像,相关操作请参见自定义镜像。

import os
import oss2

# 1. 从环境变量获取临时凭证
access_key_id = os.environ.get('LINKED_ROLE_ACCESS_KEY_ID')
access_key_secret = os.environ.get('LINKED_ROLE_ACCESS_KEY_SECRET')
security_token = os.environ.get('LINKED_ROLE_SECURITY_TOKEN')

# 检查是否成功获取
if not all([access_key_id, access_key_secret, security_token]):
    raise Exception("Failed to get linked role credentials from environment variables.")

# 2. 使用临时凭证初始化 OSS 客户端
# 假设您已为角色授予了访问 'your-bucket-name' 的权限
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-<regionID>-internal.aliyuncs.com', 'your-bucket-name')

# 3. 使用客户端访问 OSS 资源
try:
    # 列出 bucket 中的文件
    for obj in oss2.ObjectIterator(bucket):
        print('object name: ' + obj.key)
    print("Successfully accessed OSS with linked role.")
except oss2.exceptions.OssError as e:
    print(f"Error accessing OSS: {e}")

代码示例 (Shell):

#!/bin/bash
access_key_id=${LINKED_ROLE_ACCESS_KEY_ID}
access_key_secret=${LINKED_ROLE_ACCESS_KEY_SECRET}
security_token=${LINKED_ROLE_SECURITY_TOKEN}

# 访问OSS,需替换regionID、bucket_name和file_name为真实信息
echo "ID:"$access_key_id
echo "token:"$security_token
ls -al /home/admin/usertools/tools/

# 示例为通过ossutil从OSS指定路径下载文件到本地test_dw.py,并输出文件内容。
/home/admin/usertools/tools/ossutil64 cp --access-key-id $access_key_id --access-key-secret $access_key_secret --sts-token $security_token --endpoint http://oss-<regionID>-internal.aliyuncs.com oss://<bucket_name>/<file_name> test_dw.py
echo "************************ 获取成功 ************************,打印结果"
cat test_dw.py
方式二:使用 Credentials Client (推荐 Python)

代码示例 (Python):

重要

此案例在运行中需选择安装oss2、alibabacloud_credentials的Python自定义镜像,相关操作请参见自定义镜像。

from alibabacloud_credentials.client import Client as CredentialClient
import oss2

# 1. 使用 SDK 自动获取凭证
# 它会自动查找环境变量中的 LINKED_ROLE_* 等凭证信息
cred_client = CredentialClient()
credential = cred_client.get_credential()

access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()

if not all([access_key_id, access_key_secret, security_token]):
    raise Exception("Failed to get linked role credentials via SDK.")

# 2. 使用凭证初始化 OSS 客户端
auth = oss2.StsAuth(access_key_id, access_key_secret, security_token)
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name')

# 3. 访问 OSS
print("Listing objects in bucket...")
for obj in oss2.ObjectIterator(bucket):
    print(' - ' + obj.key)
print("Successfully accessed OSS with linked role via SDK.")

后续步骤:提交与发布

调度配置在开发环境设置完成后并不会立即生效。必须将节点提交并发布到生产环境,调度系统才会根据最新配置,在生产环境中生成周期实例并自动执行任务。

相关文档