无法通过在 Apache Beam 中创建模板以所需顺序 运行 多个管道

Unable to run multiple Pipelines in desired order by creating template in Apache Beam

我有两个独立的管道,比如 'P1' 和 'P2'。根据我的要求,只有在 P1 完全完成执行后,我才需要 运行 P2。我需要通过一个模板完成整个操作。

基本上,模板是在找到 运行() 的那一刻创建的,比如 p1.run()。

所以我看到我需要使用两个不同的模板来处理两个不同的管道,但这不能满足我严格的基于顺序的管道执行要求。

我想到的另一种方法是在 p2.run() 的 ParDo 中调用 p1.run()并保持 p2 的 运行() 等到 p1 的 运行() 完成。我尝试过这种方式,但卡在下面给出的 IllegalArgumentException 中。

java.io.NotSerializableException: PipelineOptions objects are not serializable and should not be embedded into transforms (did you capture a PipelineOptions object in a field or in an anonymous class?). Instead, if you're using a DoFn, access PipelineOptions at runtime via ProcessContext/StartBundleContext/FinishBundleContext.getPipelineOptions(), or pre-extract necessary fields from PipelineOptions at pipeline construction time.

是否根本不可能在任何转换中调用管道的 运行(),例如另一个管道的 'Pardo'?

如果是这种情况,如何通过创建一个模板来满足我顺序调用两个不同Pipeline的需求?

一个模板只能包含一个管道。为了对两个单独的管道的执行进行排序,每个管道都是一个模板,您需要在外部安排它们,例如通过一些工作流管理系统(例如 Anuj 提到的,或 Airflow 或其他东西 - 你可能会从 this post 中获得一些灵感)。

我们知道需要在单个管道中对 Beam 中的原语进行更好的排序,但还没有具体的设计。