【发布时间】:2016-01-26 13:18:17
【问题描述】:
我试图弄清楚 DataFlow 如何扩展某些操作以及如何使其表现最佳。首先,我刚刚创建了一个从 BigQuery 读取数据(约 2500 万行,总共 30GB)的简单流程,执行 JSON 提取,一个简单的按键分组,然后一个聚合分组(每个约 100 个元素),然后执行另一个对每个键进行转换并将其放回新表中(约 500k 行,总共 25gb)。
管道的总执行时间在 10 到 18 分钟之间,具体取决于我分配的工人数量或我是否使用多核机器等。我无法将其加速到低于此时间。我还没有确定确切的阈值,但基本上 20 个单核或 10 个四核之间的差异不再可靠。
所以我的问题是如何进一步调查并找出哪个步骤花费的时间最多以及如何改进它。我假设 DataFlow 本身负责扩展各个步骤并在它们之间进行平衡。但对我来说,例如现在看到收到的第一条消息和发送的最后一条消息会很有趣,也许每一步的吞吐量随时间变化。这是在某处可用的东西,还是我必须自己开始检测和记录它?有了这些信息,我将开始基于此优化各个步骤,并可能覆盖 DataFlows 缩放。
这是正确的方法,还是有更好的方法可用?
** 我的目标时间是缩短到 2 分钟。
【问题讨论】:
-
您对问题的表述方式对于 Stack Overflow 来说似乎过于宽泛。如果不查看您的管道,很难知道如何推荐性能改进。也许您可以查看FAQ。您还应该能够在开发者控制台中看到管道统计信息,以解决一般监控问题。
-
谢谢,问题更多是关于如何调试它,我会看看回复是否合适,如果讨论太多,我会拆分并清理问题。
标签: performance stream google-bigquery google-cloud-dataflow