Apache Beam /数据流改组

时间:2019-01-10 03:39:27

标签: google-cloud-dataflow apache-beam

org.apache.beam.sdk.transforms.Reshuffle的目的是什么?在文档中,目的定义为:

  

一个PTransform,它返回一个与其输入等效的PCollection,但   在操作上提供了GroupByKey的一些副作用,   特别防止周围变换的融合,   按ID进行检查点和重复数据删除。

防止周围变换融合的好处是什么?我认为融合是一种优化措施,可以防止不必要的步骤。实际用例会有所帮助。

1 个答案:

答案 0 :(得分:5)

在很多情况下,您可能需要重新整理数据。以下不是详尽的清单,但应该给您和您为什么可以改组的想法:

当您的ParDo转换之一具有很高的扇出度

这意味着您的ParDo之后并行度增加。如果您在此处没有破坏融合,那么您的管道将无法将数据拆分到多台计算机中进行处理。

请考虑DoFn的极端情况,即为每个输入元素生成一百万个输出元素。考虑此ParDo在其输入中接收10个元素。如果您不破坏这种高扇形ParDo及其下游转换之间的融合,尽管您将拥有数百万个元素,但它只能在10台机器上运行。

  • 诊断此问题的一种好方法是查看输入PCollection中的元素数量与输出PCollection中的元素数量。如果后者明显大于第一个,则您可能要考虑添加重新排列。

当计算机之间的数据平衡不佳时**

想象一下,您的管道消耗9个10MB的文件和一个10GB的文件。如果每个文件都是由一台计算机读取的,那么您的一台计算机将比其他计算机拥有更多的数据。

如果不重新组合此数据,则在管道运行时,大多数计算机将处于空闲状态。重新整理它使您可以重新平衡要在计算机之间更均匀地处理的数据。

  • 诊断此问题的一种好方法是查看您的管道中有多少工人正在执行工作。如果管道很慢,并且只有一个工作人员在处理数据,那么您可以从改组中受益。