Airflow 气流动态任务创建流设置不工作
我有一个复杂的DAG,它基本上对六个不同的源重复六次它的流。因此,我一直在使用for循环动态创建流,如下所示(小示例): 所有的任务都在DAG中成功创建,因为我可以在Airflow UI上看到它们,但奇怪的是,它只是在循环中第一次链接流中的任务(source_1) 所有其他任务都没有上游或下游。我不明白这是怎么可能的,因为循环中的第一次发生是有效的,不是所有的都工作吗 这是我的实际代码(这是一个非常大的DAG,所以我只显示任务,而不是我在任务中使用的python可调用函数…): 正如您所看到的,流媒体无法正常工作 在我最近修改该文件之前,它工作得很好,可以在这里看到 我只是对代码进行了大量重构,当我重新加载代码时,我看到了这个错误。我不确定我做了什么,但我做了很多查找+替换全部来重命名东西,我想知道我是否在这个过程中弄错了什么,也许我只是没有看到代码中的错误。但让我觉得这不是问题的原因是,如果这是问题所在,那么为什么我的第一个源代码会正确链接到它的流中Airflow 气流动态任务创建流设置不工作,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有一个复杂的DAG,它基本上对六个不同的源重复六次它的流。因此,我一直在使用for循环动态创建流,如下所示(小示例): 所有的任务都在DAG中成功创建,因为我可以在Airflow UI上看到它们,但奇怪的是,它只是在循环中第一次链接流中的任务(source_1) 所有其他任务都没有上游或下游。我不明白这是怎么可能的,因为循环中的第一次发生是有效的,不是所有的都工作吗 这是我的实际代码(这是一个非常大的DAG,所以我只显示任务,而不是我在任务中使用的python可调用函数…): 正如您所看到的,
有没有可能我在一个DAG中可以完成的任务数量达到了某种限制?我想我发现了你的错误: 首先,为了排除这不是气流错误,我创建了一个小DAG,它为7个源创建了25个任务,并设置了上游,一切正常 因此,我接受了您的代码,并尝试了它,我遇到了与您看到的完全相同的问题。
现在我继续,注释了所有设置上游的步骤,并一步一步地将它们放回原处,所有操作都正常,直到最后一行:
finished_foo_bar_blah_workflow.set_upstream(source_successful)
因此,我查看了任务finished_foo_bar_blah_工作流
,就我所见,这个任务只需要创建一次,而不是为每个源创建一次。所以我把密码
# finished_foo_bar_blah_workflow
finished_foo_bar_blah_workflow = BashOperator(
task_id='finished_foo_bar_blah_workflow',
bash_command='echo "Finished foo_bar_blah_workflow"',
dag=dag)
在sources:行中源代码的上方,瞧,一切正常
编辑
因此,我查看了上游和下游列表中的任务,这些任务应该直接位于finished_foo_bar_blah_工作流
的上游,而finished_foo_bar_blah_工作流
在上游列表中只有一个任务(在我移动创建该任务的代码之前,之后它正确地包含了7个任务),所有本应直接位于该任务上游的任务,在其下游_列表中引用它,并且其上游_列表也包含本应在那里的任务。因此,这可能是一个关于多次创建具有相同任务id的任务的错误。我甚至无法理解这是如何可能的。如果您考虑一下,因为任务显然都是正确创建的(您可以清楚地看到它们都在那里),因此for循环正在工作。在for循环中是流连接。没有理由不调用代码。所以我认为这可能是某种气流虫子。因此,我不得不从for循环中消除动态任务创建,并手动为每个源代码添加代码;我的代码增长了1398行。。。。更新:我只是手动为每个源代码输入代码,同样的事情发生了。第一个源正确链接了它的流,但其余的没有流连接。这进一步证实了我的怀疑,即这是某种气流缺陷。也许我在一个DAG中有太多的任务?我将尝试将每个源放入它自己的子数据集中,然后看看这是否有帮助。你修复了它。非常感谢你。我不敢相信我错过了这个。。。现在看来很明显。
finished_foo_bar_blah_workflow.set_upstream(source_successful)
# finished_foo_bar_blah_workflow
finished_foo_bar_blah_workflow = BashOperator(
task_id='finished_foo_bar_blah_workflow',
bash_command='echo "Finished foo_bar_blah_workflow"',
dag=dag)