【发布时间】: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 和数据流的复杂性缺乏全面的了解,并且渴望了解更多,因为我将构建许多不同的管道。
- 下面是数据流图的截图
【问题讨论】:
标签: group-by google-cloud-dataflow apache-beam key-value