文件参数
通过配置文件参数,在同一工作流实例中,可以将上游任务工作目录下的文件(或文件夹,下统一以文件代替)传递给下游任务。 如以下场景可能使用到
- 在ETL任务中,将多个上游任务处理好的数据文件一起传递给特定的下游任务。
- 在机器学习场景中,将上游数据准备任务的数据集文件传递给下游模型训练任务。
使用方式
配置文件参数
文件参数配置方式如下:在任务定义页面,点击“自定义参数”右边的加号,即可进行配置。
输出文件给下游任务
自定义参数四个选项分别为:
- 参数名:任务间传递时使用的标识,如下图中使用的
KEY1和KEY2 - 方向:OUT, 则表示输出文件给下游任务
- 参数类型:FILE, 表示文件参数
- 参数值:输出的文件路径,如下图中的
data和data/test2/text.txt
下图的配置表示任务output向下游任务传递两个文件数据,分别为:
- 传出文件夹
data, 并标记为dir-data, 下游任务可以通过output.dir-data获取该文件夹 - 传出文件
data/test2/text.txt, 并标记为file-text, 下游任务可以通过output.file-text获取该文件夹

获取上游任务的文件
自定义参数四个选项分别为:
- 参数名:上游文件输入后保存的位置,如下图中使用的
input_dir - 方向:IN, 则表示从上游任务获取文件
- 参数类型:FILE, 表示文件参数
- 参数值:上游文件的标识,为
taskName.KEY的格式 如下图中的output.dir-data, 其中output为上游任务的名称,dir-data为上游任务中输出的文件标识
下图的配置表示任务从上游任务output中获取标识为dir-data的文件夹,并保存为input_dir

下图的配置表示任务从上游任务output中获取标识为file-text的文件,并保存为input.txt

其他
备注
- 上下游任务间的文件传递基于资源中心作为中转,数据保存在资源中心
DATA_TRANSFER的目录下, 因此必须开启资源中心功能,详情请参考资源中心配置详情, 否则无法使用文件参数功能。 - 文件命名规则为
DATA_TRANSFER/日期/工作流Code/工作流版本_工作流实例ID/任务名称_任务实例ID_文件名 - 若传输的文件数据为文件夹,则会打包成后缀为
.zip的压缩文件再上传,下游任务接到后会解压并保存在对应目录 - 若需要删除文件数据,可以在资源中心的
DATA_TRANSFER目录下删除对应文件夹即可, 如直接按照日期子目录删除,会删除该日期下所有的文件数据. 也可以使用resources/data-transferOpen API 接口(删除N天前的数据)删除对应文件数据。 - 如果存在任务链 task1->task2->tas3, 则最下游任务task3也能获取task1的文件数据
- 支持一对多传输以及多对一传输
- 如果频繁大量传输文件,毫无疑问会因传输的数据量影响到系统IO性能
样例
你可以保存以下YAML文件到本地,然后执行pydolphinscheduler yaml -f data-transfer.yaml即可运行Demo.
# Define the workflowworkflow:name: "data-transfer"run: true# Define the tasks under the workflowtasks:- name: outputtask_type: Shellcommand: |mkdir -p data/test1 data/test2echo "test1 message" >> data/test1/text.txtecho "test2 message" >> data/test2/text.txttree .local_params:- { "prop": "dir-data", "direct": "OUT", "type": "FILE", "value": "data" }- { "prop": "file-text", "direct": "OUT", "type": "FILE", "value": "data/test2/text.txt" }- name: input_dirtask_type: Shelldeps: [output]command: |tree .cat input_dir/test1/text.txtcat input_dir/test2/text.txtlocal_params:- { "prop": "input_dir", "direct": "IN", "type": "FILE", "value": "output.dir-data" }- name: input_filetask_type: Shelldeps: [output]command: |tree .cat input.txtlocal_params:- { "prop": "input.txt", "direct": "IN", "type": "FILE", "value": "output.file-text" }
