Google cloud dataflow 在Google云数据流上调试BigQuery的慢速读取

Google cloud dataflow 在Google云数据流上调试BigQuery的慢速读取,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,背景: 我们有一个非常简单的管道,它从BigQuery(通常为~300MB)读取一些数据,对其进行过滤/转换,然后将其放回BigQuery。在99%的情况下,该管道在7-10分钟内完成,然后重新启动以处理新批次 问题: 最近,这项工作开始每隔一段时间进行一次>3小时,在2000次运行中,可能一个月进行两次。当我查看日志时,我看不到任何错误,事实上,这只是第一步(从BigQuery读取)花费了这么长时间 有没有人对如何调试此类案例提出建议?特别是因为它实际上是从BQ读取的,而不是我们的任何转换代码

背景: 我们有一个非常简单的管道,它从BigQuery(通常为~300MB)读取一些数据,对其进行过滤/转换,然后将其放回BigQuery。在99%的情况下,该管道在7-10分钟内完成,然后重新启动以处理新批次

问题: 最近,这项工作开始每隔一段时间进行一次>3小时,在2000次运行中,可能一个月进行两次。当我查看日志时,我看不到任何错误,事实上,这只是第一步(从BigQuery读取)花费了这么长时间

有没有人对如何调试此类案例提出建议?特别是因为它实际上是从BQ读取的,而不是我们的任何转换代码。我们正在使用ApacheBeamSDK for Python 0.6.0(也许这就是原因!)

是否可以为作业定义超时


这是一个数据流方面或BigQuery方面的问题,取决于人们如何看待它。在分割数据进行并行处理时,数据流依赖于对数据大小的估计。当BigQuery偶尔会严重低估查询结果的大小时,就会出现较长的运行时间,因此,数据流会严重过度分割数据,并且运行时间会因读取BigQuery导出的大量小文件块的开销而受到限制

一方面,这是我第一次看到BigQuery产生如此严重错误的查询结果大小估计。然而,由于大小估计本身就是最佳努力,并且通常可以任意关闭,因此数据流应该对此进行控制,并防止这种过度分裂。我们会调查并解决这个问题


同时,我想到的唯一解决办法是使用Java SDK:它使用完全不同的代码读取BigQuery,据我所知,它不依赖于查询大小估计。

请包含Dataflow作业ID,以便Dataflow团队的人员可以查看它并帮助调试性能。谢谢@jkff,问题中的慢工id是“2018-01-24\u 21\u 26\u 22-2131680617017922084”。这是同一管道的id,但预计执行时间约为10分钟:“2018-01-24_23_31_21-1570697146276820485”这里是另一个缓慢作业的示例“2018-01-16_11_06_28-7923202670027546242”(最后我不得不取消)。