Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Google cloud platform 如何执行预填充任务?_Google Cloud Platform_Airflow_Google Cloud Composer - Fatal编程技术网

Google cloud platform 如何执行预填充任务?

Google cloud platform 如何执行预填充任务?,google-cloud-platform,airflow,google-cloud-composer,Google Cloud Platform,Airflow,Google Cloud Composer,所以,我有一个气流Dag,它有子Dag-分叉和连接 Dag有一个时间表,也就是说它应该每周日运行一次。这意味着,它应该在星期天的上下文中运行所有任务一次。如果所有任务都正常运行-下次它应该选择下一个星期天(与上次成功运行的星期天相比),然后再次尝试完成该星期天的所有任务,依此类推 Dag和SubDag的部分运行不同类型的任务,包括长时间运行的配置单元任务、Kubernetes中POD上的ML任务、使用GCS进行数据操作的Python任务等。这些任务可能由于各种原因而失败 其想法是,整个Dag甚至

所以,我有一个气流Dag,它有子Dag-分叉和连接

Dag有一个时间表,也就是说它应该每周日运行一次。这意味着,它应该在星期天的上下文中运行所有任务一次。如果所有任务都正常运行-下次它应该选择下一个星期天(与上次成功运行的星期天相比),然后再次尝试完成该星期天的所有任务,依此类推

Dag和SubDag的部分运行不同类型的任务,包括长时间运行的配置单元任务、Kubernetes中POD上的ML任务、使用GCS进行数据操作的Python任务等。这些任务可能由于各种原因而失败

其想法是,整个Dag甚至单个任务(使用clear)应该能够在任何时间触发(手动或通过时间表),并且它应该自动从离开的地方开始,而不应该重做它已经为特定运行(即特定的星期日)完成的内容

这意味着Dag是动态的。如果它已经为一个“运行日期”完成了一个任务,并且该任务在同一个“运行日期”的上下文中再次运行,那么该任务将自身变形为一个虚拟python任务,该任务刚刚在其中休眠。否则,该任务将成为一个配置单元任务或POD,或者其他一些Python任务,需要执行实际的工作

这样,整个Dag结构保持不变,但只有一些任务在已针对Dag运行的上下文执行时变为虚拟任务

现在这一切都完成了——但要做到这一点,我必须完成以下工作

有一个

  • 总的来说,最后一次“为日期运行”和当前“为日期运行”概念-需要通过查看之前的dag运行和这些顶级dag运行的最终任务上的xcom推送值来查找和计算

  • 每个任务-查找以前的子dag运行(向后看可能是30天前),并检查是否有该任务的任何实例成功运行,并且该运行的“运行日期”与此运行的“运行日期”概念相同。根据这一点,任务决定它将是什么类型的任务。是否跳过

  • 子DAG中的每个任务都有一个xcom键dummy,该键在子DAG完成时(通过回调)得到更新。如果任务已变形为虚拟任务,则将其标记为虚拟true。这可以确保,如果在成功运行之后,有许多其他运行具有相同的“running for date”概念,则该任务被标记为dummy,以便下次“running for date”概念更改时,代码知道什么是dummy成功,哪些是正确的成功

  • 如果“running for date”尚未到达,并且前一个“running for date”具有总体Dag Success状态,并且有一个任务触发Dag,则所有任务都将变为虚拟任务

  • 好吧,长话短说

    上述逻辑需要时间。我不知道为什么。它是一个具有许多DAG的共享气流服务器,上面的查询(在DAG运行和任务实例以及x com拉取上)大约需要2分钟。我所有的内部DAG(子DAG)开始一起填充!!每个人都要做2分钟

    我最初在父dag中保留了我的第一个任务中的所有逻辑,并认为其他dag将能够读取填充的配置,但这并没有发生。我甚至不能用一个全局变量来表示我已经完成了所有的计算——只是从一个源读取

    最终的结果是,我的一些任务不稳定地失败了。气流调度器不喜欢气流等待行李填充所需的时间量

    有没有干净的解决办法

    问题: 如何在填充开始之前进行初始化

    谢谢你的阅读