Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Airflow 气流动态任务创建流设置不工作_Airflow_Airflow Scheduler - Fatal编程技术网

Airflow 气流动态任务创建流设置不工作

Airflow 气流动态任务创建流设置不工作,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有一个复杂的DAG,它基本上对六个不同的源重复六次它的流。因此,我一直在使用for循环动态创建流,如下所示(小示例): 所有的任务都在DAG中成功创建,因为我可以在Airflow UI上看到它们,但奇怪的是,它只是在循环中第一次链接流中的任务(source_1) 所有其他任务都没有上游或下游。我不明白这是怎么可能的,因为循环中的第一次发生是有效的,不是所有的都工作吗 这是我的实际代码(这是一个非常大的DAG,所以我只显示任务,而不是我在任务中使用的python可调用函数…): 正如您所看到的,

我有一个复杂的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)