项目目录区的节点及工作流往往都是需要周期性调度的,故我们需要在节点或工作流的调度配置面板配置调度相关属性,包括调度周期、调度依赖、调度参数等。本文为您介绍调度配置的相关内容。
前提条件
注意事项
任务的调度配置仅用于定义任务调度运行时的相关属性,任务需通过发布流程发布至生产环境后,才会根据该配置进行最终调度。
调度时间仅定义任务预期执行时间,其实际执行时间还受上游执行情况控制,关于任务执行条件说明,详情请参见任务运行诊断。
DataWorks支持多种类型任务互相依赖,操作前,建议您先查看复杂依赖场景调度配置原则与示例文档了解DataWorks在该场景下预设依赖的情况。
DataWorks上,调度任务会根据调度类型及周期数生成相应的查看周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),并通过周期实例的方式自动调度运行该任务。
在使用调度参数的情况下,DataWorks调度任务各周期代码入参由该周期对应的定时时间以及您调度参数表达式最终决定。各周期代码入参与调度参数配置与替换的关系,请参见调度参数来源及其表达式。
工作流包括本身工作流节点以及内部节点,依赖关系较为复杂,本文仅介绍单独节点的依赖及调度说明,工作流调度依赖关系的详细说明,请参见周期工作流。
进入调度配置页面
进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的,进入Data Studio。
进入调度配置页面。
在数据开发(Data Studio)界面,您需找到目标节点,进入该节点的编辑页面。
单击节点编辑页面右侧导航栏的调度配置,进入节点调度配置页面。
配置节点调度属性
在节点的调度配置页面,您需要分别配置节点的调度参数、调度策略、调度时间、调度依赖和节点输出参数。
(可选)调度参数
若您在编辑节点代码时,在代码中定义了变量,需在此处对该变量进行赋值。
调度参数是根据任务调度的业务时间及调度参数的取值格式自动替换为具体的值,实现任务调度时间内参数的动态替换。
配置调度参数
您可以通过如下两种方式定义调度参数。
定义调度参数方式 | 描述 | 配置图示 |
添加参数 | 同一个调度任务可以配置多个调度参数,当需使用多个调度参数时,可以单击添加参数添加。
|
|
加载代码中的参数 | 用于自动识别当前任务代码中定义的变量名,并将识别到的变量名添加为调度参数,便于调度任务后续使用。 说明 通常,代码中是按照 Pyodps节点、通用Shell节点对于变量名的定义方式与其他节点存在差异。各类型节点的调度参数配置格式,详情请参见各类型节点的调度参数配置示例。 |
|
调度参数支持格式
具体请参见调度参数来源及其表达式。
确认生产环境任务的调度参数配置
为避免周期调度任务运行时,由于调度参数不符合预期而导致任务运行出现问题,建议在任务发布后,前往生产运维中心的周期任务界面,查看生产环境下该周期任务的调度参数配置情况。查看周期任务,详情请参见管理周期任务。
调度策略
调度策略用于定义周期调度任务中实例的生成方式、调度类型、计算资源与资源组等信息。
参数 | 说明 |
实例生成方式 | 节点提交发布至生产环境调度系统后,平台会根据节点配置的实例生成方式生成自动调度的周期实例。 |
调度类型 |
|
超时定义 | 设置超时时间后,如果任务运行时长超过超时时间,任务将自动终止运行。其配置说明如下:
|
重跑属性 | 配置节点在特定情况下重跑。 重跑属性不能为空,其支持的类型及应用场景如下:
|
失败自动重跑 | 开启后,当任务运行失败(不包括用户主动终止任务运行)时,调度系统会根据重跑次数和重跑间隔自动触发重跑。
说明
|
计算资源 | 请配置任务运行所需的引擎资源。如需创建新的资源,您可以通过计算资源管理进行操作。 |
计算配额 | 支持在MaxCompute SQL节点、MaxCompute Script节点配置任务运行所需的计算配额(Quota),为计算作业提供计算资源(CPU及内存)。 |
调度资源组 | 配置任务运行使用的调度资源组,按需选择即可。
|
数据集 | 单击
|
调度时间
调度时间用于配置调度任务自动执行的周期、时间等信息。
如果是工作流中的节点,则调度时间相关参数在工作流页面的调度配置中设置,如果是非工作流中的节点,则在各节点的调度配置中设置调度时间。
注意事项
任务调度频率与上游任务周期无关
任务多久调度一次与任务本身定义的调度周期有关,与上游任务调度周期无关。
DataWorks支持不同调度周期的任务互相依赖
DataWorks中,调度任务会根据调度类型及周期数生成相应的周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),通过实例的方式运行任务。周期任务设置的依赖关系,其本质是任务间所生成实例的依赖。上下游任务的调度类型不同,其生成的周期实例数及实例的依赖情况不同。不同调度周期的上下游依赖情况,请参见调度依赖方式选择(跨周期依赖)。
非调度时间任务会空跑
DataWorks上非每天调度的任务(例如周、月调度的任务)在非调度时间内会空跑,当到达任务定义的调度时间后立即返回成功状态。若下游存在日调度任务,会调起该下游日调度任务正常执行。即上游空跑,下游调度任务正常根据节点定义的调度时间执行。
任务执行时间说明
此处仅设置任务预期调度时间,任务的实际执行时间受多种因素影响。例如,上游定时时间、任务执行资源情况、任务实际运行条件等,详情请参见任务运行条件说明。
配置调度时间
参数 | 说明 |
调度周期 | 调度周期即任务在调度场景下自动执行的周期数,用于定义在生产环境调度系统中,多久会真实执行一次节点中的代码逻辑。调度任务会根据调度类型及周期数生成相应的周期实例(例如,小时调度任务每天会根据周期数产生相应数量的小时实例),通过周期实例的方式自动调度运行周期任务。
重要 周调度、月调度和年调度在非调度时间内仍会每日生成实例,实例显示为成功状态,但实际会空跑,不会真实执行任务。 |
生效日期 | 调度节点在有效日期内生效并自动调度,超过有效期的任务将不会自动调度。此类任务为过期任务,您可在运维大屏查看过期任务数量,并根据情况对其做下线等处理。 |
Cron表达式 | 该表达式根据时间属性配置自动生成,无需配置。 |
调度依赖
DataWorks上任务的调度依赖是指调度场景下节点间的上下游依赖关系。在DataWorks中,上游节点任务运行完成且运行成功,下游节点任务才会开始运行。配置调度依赖后,可保障调度任务在运行时能获取到正确的数据(即当前节点依赖的上游节点成功运行后,DataWorks通过节点的运行状态识别到上游表的最新数据已产生,下游节点再去取数),避免下游节点取数据时,上游表数据还未正常产出,导致下游节点取数出现问题。
注意事项
节点依赖关系配置后,默认在任务调度运行时,下游节点运行条件之一为其依赖的上游节点均已执行成功,否则当前任务取数会存在质量问题。
任务实际运行时间除了取决于任务本身的定时时间(即任务在调度场景下的预期执行时间)外,还取决于上游任务的完成时间(即下游任务实际执行时间还取决于上游任务的定时时间)。若上游任务未完成运行,即便下游任务的定时时间早于上游任务,下游任务也不会运行。任务运行条件,详情请参见任务运行诊断。
配置调度依赖
DataWorks任务依赖最终是为了保障下游取数无误,实际是上下游表数据的血缘依赖。您可根据业务需求,选择是否需要基于表的血缘关系配置调度依赖。节点的调度依赖配置流程如下。
由于节点依赖关系配置后,默认节点的上下游产出表存在强依赖关系(即下游表数据的产出需要依赖上游产出的表数据),因此,任务在配置调度依赖时,需确认是否存在强血缘依赖,即确认当前任务是否会因为上游数据未产出而导致当前任务取数出现问题。若下游节点中表数据的产出,需依赖上游节点产出的表数据,则认为上下游节点的表存在强血缘依赖关系。
序号 | 说明 |
① | 为避免当前任务执行时间不符合预期,您可先评估表之间是否存在强依赖关系,确认是否需要基于血缘关系配置调度依赖。 |
② | 确认当前场景是否为周期调度任务产出的表数据。不在DataWorks周期调度产出的表数据,DataWorks无法通过任务运行情况监控数据产出,因此,部分表不支持配置调度依赖。 非DataWorks周期性调度产出数据的表包括但不限于以下几类:
|
③④ | 根据需要依赖上游昨天还是今天的数据、小时分钟任务是否要依赖自己上一个小时或分钟实例,来选择依赖上游同周期还是上一周期。
说明 根据血缘配置时,调度依赖场景选择配置细节,请参见调度依赖方式选择(同周期依赖)。 |
⑤⑥⑦ | 依赖关系配置完成并发布生产后,可在运维中心周期任务中查看任务依赖关系是否符合预期。 |
自定义节点配置依赖
若DataWorks上任务间不存在强血缘依赖(例如,不强依赖上游某个分区数据,仅取上游当前时间点最大分区数据),或依赖的数据非周期调度节点产出的表数据(例如,本地上传的表数据),则您可自定义节点的依赖关系。自定义依赖配置具体如下:
依赖工作空间根节点
例如,同步任务中的上游数据来源于其他业务数据库,SQL类型任务对实时同步任务产出的表数据进行加工等场景,您可直接选择挂载依赖至工作空间根节点下。
依赖虚拟节点
当工作空间中业务流程较多或较复杂时,您可通过虚拟节点管理该业务流程,将需要统一管控的节点挂载依赖至某虚拟节点,使工作空间下数据流转路径更加清晰。例如,控制业务流程整体调度时间、控制业务流程整体调度与冻结(即不调度)。
节点输出参数
在上游节点定义输出参数及其取值后,在下游节点定义输入参数(取值引用上游节点的输出参数),即可在下游节点中使用此参数获取上游节点传递过来的取值。
注意事项
节点输出参数仅作为下游节点的输入参数(在下游节点调度参数区域添加参数,通过参数操作列的
关联上游参数),部分节点无法直接将上游节点的查询结果传递到下游,如果您需要将上游节点的查询结果传递到下游节点,可以使用赋值节点,详情可参见文档:赋值节点。支持节点输出参数的节点为:
EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL和MySQL节点。
配置节点输出参数
节点输出参数的取值分为常量和变量两种类型。
完成输出参数的定义并提交当前节点后,即可在下游节点配置调度参数时,绑定上游节点的输出参数作为下游节点的输入参数。

参数名:定义的输出参数名称。
参数值:输出参数的取值。取值类型包括常量和变量:
常量为固定字符串。
变量包括系统支持的全局变量、调度内置参数、自定义参数。
配置节点关联角色
DataWorks关联角色允许为特定任务节点指定一个预设的 RAM 角色,任务在运行时将通过阿里云 STS (Security Token Service) 动态获取该角色的临时访问凭证。您的代码无需明文填写永久 AK,即可获得访问其他云资源的权限。
资源组限制:仅支持运行在Serverless 资源组的节点。
节点类型限制:仅支持Python、Shell、Notebook、PyODPS 2、PyODPS 3节点。
1、在 DataWorks 节点中配置关联角色

在节点编辑界面的右侧,找到并单击调试配置。
在调度配置面板中,切换到关联角色页签。
在RAM角色下拉框中,选择您准备好的 RAM 角色。
重要如果下拉框为空,或找不到所需的角色,请参考配置关联角色(使用STS方式)访问其他云产品完成RAM角色配置。
配置完成后,提交节点。此配置仅对调试运行生效。
2、在代码中获取和使用临时凭证
配置关联角色后,DataWorks 会在任务运行时,将获取到的临时凭证注入到运行环境中。您可以通过以下两种方式在代码中获取它们。
方式一:读取环境变量(推荐 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/
/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 os://<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.")3、运行与验证
Shell、Python:任务运行时,将使用指定的RAM角色访问其他云产品。
PyODPS:访问其他云产品(如OSS)时,使用您设置的 RAM 角色身份;但访问 MaxCompute 数据时,仍然自动使用计算资源(项目级别)配置的访问身份。
配置调度属性
节点完成调试后,需将调试配置中的关联角色同步至调度配置的。发布后,任务将以该角色的身份运行。
若在调试配置中配置自定义镜像,需同步设置到调度配置中。
在运维中心查看执行角色
任务运行结束后,在运维中心查看任务实例的详细信息,以确认是否成功使用指定的角色。
进入。
找到您运行的节点实例,单击进入详情页。
在实例详情的属性区域,查看执行身份字段,此处展示本次运行实际使用的关联角色ARN。
ARN为资源唯一标识,详细说明可参见权限策略基本元素。
附录参考
调度参数参考文档:调度参数格式参考。
调度策略参考文档:
调度时间参考文档:调度时间参考文档。
调度依赖参考文档:
节点输出参数参考文档:配置并使用节点上下文参数。
其他参考文档:夏令时切换对调度任务运行的影响。


为节点添加