首页 > 解决方案 > 如何使数据流 apache Beam 工作更快

问题描述

我有一个 apache Beam 作业,大约需要 6 个小时以上才能完成。我们摄取大约 2.7Tb 的 GCS 数据以及 Bigtable/Bq/等其他数据源,然后执行 CoGroupbyKey.create()。

GCS 数据采用原始字符串的形式,userId, hashedPhoneNumber例如:

525135a7-cb59-46ec-8d1d-0f12df02f486, 3070816492067005070

从 GCS 摄取数据并使用 GroupbyKey 创建 KV 时,我有多个 DoFns

uuid -> Set<hashedphoneNumber>

我的问题更多是关于如何使管道更快?

  1. 现在我把它们都读作字符串数据类型。将它们读取为 UUID 和 Long 有帮助吗?当我尝试进行测试时,我无法获得 UUID 编码器。
  2. 制作 Set<> 是否需要额外费用?一般来说,应该记住任何序列化/反序列化吗?我可以只连接所有 hashedPhoneNumber 并将其传递下来,而不是制作一个 Set 吗?作为开发人员,使用 Set<> 可以帮助我理解管道 i/p、o/p。
  3. 任何其他使管道更快的方法或关于如何使用这些类型的一般建议?

标签: mapreducegoogle-cloud-dataflowapache-beam

解决方案


看看这个答案的编码器部分:

Apache Beam - 我应该了解编写高效数据处理管道的关键概念是什么?

那里还有其他一般提示和技巧。


推荐阅读