如何使用Airflow变量为DAG动态运行多个作业

时间:2019-04-14 11:17:58

标签: python airflow

我知道如何使用 Variable 动态地运行DAG的任务,并且在您触发同一DAG的多次运行之前,它运行得很好。

即,在某个时候在 data / to / load / 目录下创建了一个包含文件的新目录之后,我在某个地方编写了一个脚本,该脚本将触发airflow variables -set dir data/to/load/$newDir,然后触发{{ 1}}。现在,假设在相同的时间在 data / to / load / 下创建目录“ a”和“ b”,这将两次airflow trigger_dag dyn_test调用两次,并且在变量集调用上有两个不同的输入(一个以“ a”为后缀,另一个以“ b”为后缀)。而且我在气流GUI中看到两个作业正在为DAG运行,但问题是它们都在考虑相同的目录值a或b。这肯定意味着它需要进行最后的“气流变量设置”调用。我该如何解决?触发多次运行的方式是什么,每个运行采用不同的值(在 dir 变量中)动态循环。我的Dag看起来像这样:

airflow variable + airflow trigger_dag

1 个答案:

答案 0 :(得分:1)

问题中描述的场景是一个先进先出队列适合的场景,它假定您要保持当前的方式来将目录单独设置为显式设置。顺序。

也就是说,Airflow CLI trigger_dags命令允许传递--conf标志来设置在DagRun中传递的配置字典,我将按照您所描述的那样进行操作设置了变量,就会触发dag。

http://airflow.apache.org/cli.html#trigger_dag

这就是代码中的外观。

airflow trigger_dag dyn_test --conf '{"me_seeks.dir": "data/to/load/$newDir"}'

您将provide_context kwargs设置为用于任务的气流操作员。

可以在上下文中检索DagRun的实例,并在配置中检索dir

假设您使用Airflow PythonOperator定义了任务;那么您要在dir中检索python_callable的代码将类似于以下内容:

def me_seeks(dag_run=None):
    dir = dag_run.conf['me_seeks.dir']