文件参数

通过配置文件参数,在同一工作流实例中,可以将上游任务工作目录下的文件(或文件夹,下统一以文件代替)传递给下游任务。 如以下场景可能使用到

  • 在ETL任务中,将多个上游任务处理好的数据文件一起传递给特定的下游任务。
  • 在机器学习场景中,将上游数据准备任务的数据集文件传递给下游模型训练任务。

使用方式

配置文件参数

文件参数配置方式如下:在任务定义页面,点击“自定义参数”右边的加号,即可进行配置。

输出文件给下游任务

自定义参数四个选项分别为:

  • 参数名:任务间传递时使用的标识,如下图中使用的KEY1KEY2
  • 方向:OUT, 则表示输出文件给下游任务
  • 参数类型:FILE, 表示文件参数
  • 参数值:输出的文件路径,如下图中的datadata/test2/text.txt

下图的配置表示任务output向下游任务传递两个文件数据,分别为:

  • 传出文件夹 data, 并标记为dir-data, 下游任务可以通过output.dir-data获取该文件夹
  • 传出文件 data/test2/text.txt, 并标记为file-text, 下游任务可以通过output.file-text获取该文件夹

img.png

获取上游任务的文件

自定义参数四个选项分别为:

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

下图的配置表示任务从上游任务output中获取标识为dir-data的文件夹,并保存为input_dir

img.png

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

img.png

其他

备注

  • 上下游任务间的文件传递基于资源中心作为中转,数据保存在资源中心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.

  1. # Define the workflow
  2. workflow:
  3. name: "data-transfer"
  4. run: true
  5. # Define the tasks under the workflow
  6. tasks:
  7. - name: output
  8. task_type: Shell
  9. command: |
  10. mkdir -p data/test1 data/test2
  11. echo "test1 message" >> data/test1/text.txt
  12. echo "test2 message" >> data/test2/text.txt
  13. tree .
  14. local_params:
  15. - { "prop": "dir-data", "direct": "OUT", "type": "FILE", "value": "data" }
  16. - { "prop": "file-text", "direct": "OUT", "type": "FILE", "value": "data/test2/text.txt" }
  17. - name: input_dir
  18. task_type: Shell
  19. deps: [output]
  20. command: |
  21. tree .
  22. cat input_dir/test1/text.txt
  23. cat input_dir/test2/text.txt
  24. local_params:
  25. - { "prop": "input_dir", "direct": "IN", "type": "FILE", "value": "output.dir-data" }
  26. - name: input_file
  27. task_type: Shell
  28. deps: [output]
  29. command: |
  30. tree .
  31. cat input.txt
  32. local_params:
  33. - { "prop": "input.txt", "direct": "IN", "type": "FILE", "value": "output.file-text" }