我想在谷歌数据流上运行一个管道,这取决于另一个管道的输出。现在我只是在本地使用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))
我的问题如下:
答案 0 :(得分:2)
DataflowRunner是否保证第二个只在第一个管道完成后启动?
不,Dataflow只是执行一个管道。它没有用于管理依赖管道执行的功能。
更新:为了澄清,Apache Beam确实提供了一种等待管道完成执行的机制。请参阅waitUntilFinish()
类的PipelineResult
方法。参考:PipelineResult.waitUntilFinish()。
是否有一种首选方法可以相继运行两条管道?
考虑使用Apache Airflow之类的工具来管理相关管道。您甚至可以实现一个简单的bash脚本,以便在另一个管道完成后部署一个管道。
还有推荐的方法将这些管道分成不同的文件,以便更好地测试它们吗?
是的,单独的文件。这只是一个很好的代码组织,不一定更适合测试。