【问题标题】:Stop executing a pipeline transform while other pipeline transforms keep running停止执行管道转换,而其他管道转换继续运行
【发布时间】:2016-12-25 03:21:13
【问题描述】:

我在 google 存储中有许多文件,在应用我尝试使用单个管道执行的简单 ParDo 转换后,我必须将它们写入 BigQuery 中的多个表。所以基本上我有许多并行的未连接的源和接收器在一个数据流作业中使用单个管道运行。 在 Pardo 转换中,我有一个条件,如果它的计算结果为真,那么写入特定 BigQuery 表(转换)必须停止,而写入其他 BigQuery 表(其他转换)仍然照常。

在此图像中,有 2 个并行源和 2 个并行接收器,由于源中日期为 2014-08-01 的一些错误数据,第一次转换失败。一旦 2014-08-01 转换失败,2014-08-02 转换就会被取消。 2014-08-02 转换没有不良数据。

有没有办法防止取消其他转换?

【问题讨论】:

  • “停止”是什么意思?什么都不应该写,还是应该写所有已经写好的元素?还有,这是什么条件?是基于时间的吗?元素的属性?如果 ParDo 正在多台机器上进行处理,它们是否都能看到已收到此停止信号?如果一个元素在接收到带有较早时间戳(延迟数据)的停止信号之后到达,是否应该发出它?
  • 当特定转换停止时,不应在该转换的接收器中写入任何内容,而其他转换继续执行。条件基于元素的属性。我现在将在问题中进行更多解释。

标签: google-bigquery google-cloud-platform google-cloud-dataflow


【解决方案1】:

目前在 Dataflow 服务中,整个管道要么成功要么失败,任何失败都会取消管道的其余部分。没有办法改变这种行为。如果您想让它们分别成功或失败,则需要运行单独的管道。

请注意,在操作上,您可以从同一个 Java 主程序运行两个管道;只需创建两个不同的 Pipeline 对象并分别在它们上调用 run() 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2021-02-10
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多