【发布时间】:2019-12-13 02:30:35
【问题描述】:
我有一个 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>
我的问题更多是关于如何使管道更快?
- 现在我将它们都读取为字符串数据类型。将它们读取为 UUID 和 Long 有帮助吗?我在尝试进行测试时无法获得 UUID 编码器。
- 制作套装需要额外费用吗?一般来说,应该记住任何序列化/反序列化吗?我可以只连接所有 hashedPhoneNumber 并将其传递下去,而不是制作一个 Set 吗?作为开发人员,使用 Set 可以帮助我理解管道 i/p、o/p。
- 是否有任何其他方法可以使管道更快或关于如何使用这些类型的一般建议?
【问题讨论】:
-
我建议你检查Tips and tricks to get your Cloud Dataflow pipelines into production,也可以使用autoscaling options 或称为Streaming Engine 的功能来加快你的管道,重要的是要考虑这可能产生的费用。
-
如果 Set 消耗更多内存或 vCPU,管道的成本将取决于(vCPU、内存和存储:永久磁盘),这可能会影响管道的最终价格。您可以验证 Dataflow 定价的工作原理here。
标签: mapreduce google-cloud-dataflow apache-beam