如何改善数据流管道中的低吞吐量 groupbykey
Posted
技术标签:
【中文标题】如何改善数据流管道中的低吞吐量 groupbykey【英文标题】:How to improve low throughput groupbykey in dataflow pipeline 【发布时间】:2020-08-18 17:51:43 【问题描述】:我有一个 Apache Beam 批处理管道(用 Java 编写)将原始分析数据从 bigquery 转换为聚合形式。会话记录(现在可能会被接下来几天的页面事件扩展)和一组新的页面事件从 bigquery 中读取。然后,管道在聚合操作之前执行groupByKey
操作以按用户ID(跨两个数据集)分组以创建会话记录。 groupByKey
操作在较大的数据集(约 8400000 条记录)上执行非常缓慢(吞吐量约为每秒 50 条),而其他输入(约 1000000 条记录)的吞吐量要高得多(每秒约 10000 条)。有人对我如何排除故障并最终提高操作速度有任何建议吗?
根据在线研究,我知道有时使用Combine
操作而不是groupByKey
(除此之外还有article)会更有效,但我认为这不适合我的数据分组(BQ TableRow 记录)。
更多可能有用的信息:
groupByKey
将 8400000 纳入大约 3500000 条分组记录中,每个键组合的范围约为 2000 到 1 条记录
我完全承认我对 apache Beam 和数据流的复杂性缺乏全面的了解,并且渴望了解更多,因为我将构建许多不同的管道。
下面是数据流图的截图
【问题讨论】:
【参考方案1】:Beam 中的各个阶段在 Dataflow 上运行时会得到 fused together,这意味着舞台上的吞吐量与其他阶段相关,因此很可能不是 GroupByKey 而是相邻的 DoFns 导致了缓慢。如果您单击一个步骤,您可以看到步骤信息选项卡,这是一个为执行特定步骤提供时间的字段。我会看看您的管道中是否有围绕该 GroupByKey 的特定步骤,该步骤具有很高的挂壁时间。
【讨论】:
感谢您的回复。我对此进行了研究,不幸的是,它肯定是 GroupByKey 本身导致了缓慢 两者的数据大小是否相似?以上是关于如何改善数据流管道中的低吞吐量 groupbykey的主要内容,如果未能解决你的问题,请参考以下文章
随着执行的推进 + 意外的侧输入行为,数据流管道吞吐量急剧下降