如何在特定目录上手动运行Airflow DAG

时间:2017-05-26 17:53:54

标签: workflow bioinformatics airflow apache-airflow

我正在评估Airflow是否适合我的需求(在生物信息学中)。我对Airflow模型有些困难。具体做法是:

  • DAG文件实际执行的位置在哪里?它的背景是什么?如何将输入数据传递到DAG定义文件? (例如,我想为目录中的每个文件创建一个任务。)
  • 如何临时执行DAG?如何传递DAG构造的参数?

以下是我想要执行的示例。假设我刚收到一些数据作为包含某些共享文件系统中可用的20个文件的目录。我想执行一个DAG管道,它在20个文件中的每个文件上运行一个特定的bash命令,然后组合一些结果并执行进一步的处理。 DAG需要文件系统上的路径,并列出目录中的文件以为每个文件构建任务。

我可能没有必要将元数据从一个任务传递到另一个任务(我理解可以通过XCom),只要我可以预先动态构建整个DAG。但我不清楚如何通过DAG构建的路径。

换句话说,我希望我的DAG定义包含类似

的内容
dag = DAG(...)
for file in glob(input_path):
    t = BashOperator(..., dag=dag)

当我想手动触发DAG时如何传入input_path

我也不需要进行cron式调度。

1 个答案:

答案 0 :(得分:0)

关于input_path,您可以使用Airflow变量将其传递给DAG。 DAG文件中使用的代码示例:

input_path = Variable.get("INPUT_PATH")

可以使用Airflow cli导入变量,也可以通过UI手动导入变量。

您应该为此类逻辑使用子标记:

dag = DAG(...) for file in glob(input_path): t = BashOperator(..., dag=dag)

  

SubDAG非常适合重复模式。使用Airflow时,定义一个返回DAG对象的函数是一个不错的设计模式。