我想在谷歌数据流上运行一个管道,该管道取决于另一个管道的输出。现在,我正在本地使用DirectRunner依次运行两条管道:
with beam.Pipeline(options=pipeline_options) as p:
(p
| beam.io.ReadFromText(known_args.input)
| SomeTransform()
| beam.io.WriteToText('temp'))
with beam.Pipeline(options=pipeline_options) as p:
(p
| beam.io.ReadFromText('temp*')
| AnotherTransform()
| beam.io.WriteToText(known_args.output))
我的问题如下:
DataflowRunner是否保证第二个管道仅在第一个管道完成后启动?
不,数据流只是执行一个管道。它没有用于管理依赖管道执行的功能。
更新:为了澄清,Apache Beam确实提供了一种等待管道完成执行的机制。请参阅PipelineResult类的waitUntilFinish()方法。参考:PipelineResult。waitUntilFinish()。
是否有一种首选方法可以相应地运行两个管道?
考虑使用像Apache Airflow这样的工具来管理依赖的管道。您甚至可以实现一个简单的bash脚本来在另一个管道完成后部署一个管道。
还有没有推荐的方法将这些管道分离到不同的文件中,以便更好地测试它们?
是的,单独的文件。这只是很好的代码组织,不一定更好地进行测试。
我试图在Beam管道完成后,在Google DataFlow上运行一个函数(或管道)。 目前,我已经构建了一个hack来运行该函数,方法是使用 ... func在哪里: 但是有更好的方法吗?
我试图在管道完成后进行滞后更新,由于日期版本控制,表在运行时传入。由于此代码是作为模板执行的,因此需要使用NestedValueProviders。 如何在管道运行之外访问此值?在管道完成后,是否有更好的方法来做“只做一次”的工作?
tl;dr Apache Beam管道步骤涉及构建docker图像;如何使用谷歌数据流运行这个管道?存在哪些替代方案? 我目前正在尝试使用谷歌的数据流服务和apache梁(python)迈出第一步。 简单的例子很简单,但当外部软件依赖性开始发挥作用时,事情就会让我感到困惑。似乎可以使用自定义docker容器来设置自己的环境[1][2]。虽然这对大多数依赖项来说都很好,但如果依赖项是docker本身
我使用beam SDK用python编写了一个Google数据流管道。有一些文档介绍了我如何在本地运行它,并设置runner标志以在数据流上运行它。 我现在正尝试将其自动部署到CI管道(bitbucket管道,但并不真正相关)。有关于如何“运行”管道的文档,但没有真正的“部署”管道。我测试过的命令如下: 这将运行作业,但因为它正在流式传输,所以永远不会返回。它还在内部管理打包并推送到存储桶。我知道
管道A:仅由其自身回购之外的多个其他管道触发,但在同一项目中。作为被触发的结果,它对自己的回购进行更改,因此触发管道B。 pipleline B:仅由对其自身回购的更改触发,当被触发时,它将继续执行所需的任何操作 将语法流水线化 当前行为 null null 安装:https://docs.microsoft.com/en-us/azure/devops/cli/?view=azure-devop
问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了