【问题标题】:Apache Beam - Dataflow - Serialization & state sharingApache Beam - 数据流 - 序列化和状态共享
【发布时间】:2018-02-13 13:22:47
【问题描述】:

在我的一个管道 DoFn 中,我正在下载需要由另一个 DoFn 处理的二进制文件。 现在,一旦下载了二进制文件,我还将它存储在 GCS 中,并将文件的位置输出到我的下游 DoFn。但是上传到 GCS 需要很长时间,我什至不确定是否需要。

有没有办法让我的二进制缓冲区在没有任何序列化的情况下可供下游 DoFn 使用?我基本上想让工人在同一台机器上,并通过 RAM 共享数据。这可能吗?

如果不是,我在 DoFNs 之间使用 GCS 进行数据共享是错误的吗?可以直接使用文件系统吗?

【问题讨论】:

  • 也许使用PCollection<byte[]>s 在DoFns 之间传递数据?
  • 问题是数据可能有数百兆字节
  • 我认为“数百兆字节”不会有问题。 Dataflow runner 也进行了一些融合,因此在某种意义上,数据本质上是通过 RAM 共享的。
  • 它会自动执行吗?不需要告诉它使用 RAM 吗?
  • 正确。中间没有 GroupByKey 的 DoFn 链通常会被融合,并且它们之间的数据将在内存中传递。

标签: java google-cloud-dataflow apache-beam


【解决方案1】:

这里的最佳做法是将数据直接作为字节数组值传递。框架应正确处理在不包含中间 GroupByKey 的融合阶段之间传递内存中的缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2018-07-20
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多