3

我想弄清楚DataFlow如何扩展某些操作,以及如何使表现最佳。首先,我创建了一个简单的流程,用于从BigQuery中读取数据(大约25M行,总共30GB),JSON抽取,一个按键的简单组,然后一个聚集(每个〜100个元素)转换每个键并将其放回新表(〜500k行,总共25gb)。分析云数据流BigQuery吞吐量/流水线

总的管道执行时间在10-18分钟之间,具体取决于我分配的工作人员数量或者是否使用多核心机器等。我无法在此之下加速。我尚未确定确切的阈值,但基本上20个单核或10个四核之间的差异不再可靠地测量。

所以我的问题是如何进一步调查这一点,并找出哪一步需要最多时间以及如何改善它。我假设DataFlow本身负责缩放各个步骤并在它们之间进行平衡。但对我而言,现在看到收到的第一条消息和最后一条消息发送,以及可能每步一次的吞吐量都会很有趣。这是在某个地方可用的东西,还是我必须开始仪表并自己记录这些?有了这些信息,我就可以开始优化基于此的各个步骤,也许会覆盖DataFlow的缩放比例。

这是正确的方法,还是有更好的方法可用?

**我的目标时间是将其降至2分钟。

+0

你说这个问题的方式对于Stack Overflow来说太广泛了,看起来似乎。不看管道,很难知道如何推荐性能改进。也许你可以查看[FAQ](https://cloud.google.com/dataflow/faq)。您应该能够在开发人员控制台中查看管道统计信息,同时还可以查看一般监控问题。 – Nick

+0

谢谢,这个问题更多的是关于如何调试,我会看到如果回复是否合适,以及是否有太多讨论,我会分解并清理问题。 –

回答

5

数据流首先执行一个BigQuery导出作业,将数据复制到GCS并将其读入并进行处理。同样,Dataflow将数据写入GCS,然后执行BigQuery导入作业来加载表。

如果您查看作业消息和/或日志,您应该能够看到导出作业何时完成(并且您的代码开始从导出的文件中读取)以及导入作业何时开始(并且您的代码已经完成写入所有输出数据)。如果10-18分钟的大部分时间都用于BigQuery导入/导出作业,那么调整管道将不会对性能产生重大影响。

其他常见问题是有一个或两个特别热的键(例如,包含大部分数据)。从你的描述中可以看出,情况并非如此(你提到每个键都有大约100个元素)。

+0

感谢您的提示,我们实际上删除了用于测试大查询输入操作的操作,这将时间从12分钟缩短为4分钟。我还可以看到各个步骤何时开始,但是我看不到最后一个元素的处理时间。 –

+1

作为流水线的一部分而不是一个导入作业流入BigQuery不会更快吗? –

+1

通常没有。批量导入BigQuery通常比流入BigQuery更快。 –