控制 Dataflow/Apache Beam 输出分片

Controlling Dataflow/Apache Beam output sharding

我们通过实验发现,在 Dataflow/Apache Beam 管道中设置明确的输出分片数量会导致性能更差。我们的证据表明,Dataflow 最后秘密地执行了另一个 GroupBy。 我们已经开始让 Dataflow select 自动设置分片数量 (shards=0)。但是,对于某些管道,这会导致大量相对较小的输出文件(约 15K 个文件,每个 <1MB)。

是否可以向 Dataflow 发送有关输出的预期大小的提示,以便它可以相应地缩放?我们注意到这个问题主要发生在输入数据集很大而输出数据集很小的时候。

我们正在使用 Apache Beam Python 2.2.

Dataflow/Apache Beam 不支持此类提示。一般来说,Dataflow 和 Apache Beam 被设计为尽可能 "no knobs",原因如下:

  1. 允许 Dataflow 服务自行智能地做出优化决策。 Dataflow 具有智能 autoscaling 功能,可以根据当前工作负载增加或减少工作虚拟机的数量。
  2. 确保使用 Apache Beam SDK 编写的管道可跨 runners(例如 Dataflow、Spark 或 Flink)移植。管道逻辑是根据一组抽象来编写的,因此作业可以 运行 在各种环境中。每个工作人员都可以对这些 high-level 抽象应用自己的一组优化。