代码之家  ›  专栏  ›  技术社区  ›  user_1357

Apache Beam/数据流重组

  •  1
  • user_1357  · 技术社区  · 7 年前

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

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

    防止周围变换的融合有什么好处?我认为融合是一种防止不必要步骤的优化。实际用例将是有用的。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Pablo    7 年前

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

    当你的一个pardo变换有一个非常高的扇出

    这意味着平行度在pardo之后会增加。如果您不打破这里的融合,您的管道将无法将数据拆分为多台机器来处理它。

    考虑一个自由度的极端情况,它为每个输入元素生成一百万个输出元素。考虑这个pardo在其输入中接收10个元素。如果你不打破这个高扇出pardo和它的下游转换之间的融合,它将只能在10台机器上运行,尽管你将拥有数百万个元素。

    • 诊断这个的好方法 正在查看输入pcollection中的元素数与输出pcollection的元素数。如果后者明显大于第一个,那么您可能需要考虑添加一个重新洗牌。

    当您的数据在不同的机器之间没有很好地平衡时**

    假设您的管道使用9个10MB文件和一个10GB文件。如果每个文件都由一台机器读取,那么您将拥有一台机器,其中的数据比其他机器多得多。

    如果不重新整理这些数据,则在管道运行时,大多数计算机都将处于空闲状态。重新调整它允许您重新平衡要在机器上更均匀地处理的数据。

    • 诊断这个的好方法 通过查看有多少工人在您的管道中执行工作。如果管道运行缓慢,并且只有一个工人在处理数据,那么您可以从重组中获益。
    推荐文章