我正在评估Airflow是否适合我的需求(在生物信息学中)。我对Airflow模型有些困难。具体做法是:
以下是我想要执行的示例。假设我刚收到一些数据作为包含某些共享文件系统中可用的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式调度。
答案 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对象的函数是一个不错的设计模式。