我知道如何使用 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
答案 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']