当前位置: 首页 > 知识库问答 >
问题:

仅在另一个管道在google数据流上完成后执行管道

程承恩
2023-03-14

我想在谷歌数据流上运行一个管道,该管道取决于另一个管道的输出。现在,我正在本地使用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是否保证第二个仅在第一个管道完成后启动

共有1个答案

苏昊英
2023-03-14

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

  • 问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了