Cloud DataFlow性能 - 是我们的预期时间吗?

时间:2015-02-17 03:20:10

标签: google-bigquery google-cloud-storage google-cloud-dataflow

寻找关于如何最好地构建/设计和构建管道的一些建议。

经过一些初步测试后,我们无法获得我们期望的结果。也许我们只是在做一些愚蠢的事情,或者我们的期望太高了。

我们的数据/工作流程

  • Google DFP将我们的广告服务器日志(CSV压缩)直接写入GCS(每小时)。
  • 这些日志的价值在3000万到7千万的记录中,当月约为15-2亿。
  • 对其中两个字段执行转换,并将该行写入BigQuery。
  • 转换涉及在2个字段上执行3个REGEX操作(由于增加到50个操作),这将产生新的字段/列。

到目前为止我们运行的是什么:

  • 建立一个管道,从GCS读取文件一天(31.3米),并使用ParDo进行转换(我们认为我们只需要一天开始,但我们的要求是处理数月和放大器;也是。)。
  • DoFn输入是一个String,其输出是BigQuery TableRow。
  • 管道在云中执行,实例类型为" n1-standard-1" (1vCPU),因为我们认为每个工作者1个vCPU是足够的,因为转换不是过于复杂,也不是CPU密集型,即只是字符串到字符串的映射。

我们使用一些不同的工作人员配置来运行这项工作,看看它的表现如何:

  1. 5名工作人员(5名vCPU) ~17分钟
  2. 5名工作人员(10个vCPU)花了 ~16分钟(在这次运行中,我们将实例提升到" n1-standard-2"以获得双倍内核以查看是否它提高了性能)
  3. 50分钟和100名最大工作人员,自动缩放设置为" BASIC" (50-100 vCPU)〜13分钟
  4. 100分钟和150名最大工作人员,自动缩放设置为" BASIC" (100-150 vCPU) ~14分钟
  5. 这些时间是否符合您对我们的用例和管道的期望?

2 个答案:

答案 0 :(得分:1)

您还可以将输出写入文件,然后使用命令行/控制台将其加载到BigQuery中。你可能会节省一些实例的正常运行时间。这是我在遇到Dataflow / BigQuery界面问题后一直在做的事情。另外根据我的经验,有一些开销带来实例并将它们拆除(可能是3-5分钟)。您是否也将这段时间用于测量?

答案 1 :(得分:0)

BigQuery的写入限制为每桌每秒100,000行或每分钟6M。在31M行输入,需要大约5分钟的平坦写入。当你加回每个元素的离散处理时间&那么图表的同步时间(从GCS-> dispatch-> ...读取......)看起来是正确的。

我们正在研究一个表分片模型,这样你就可以在一组表中编写,然后在BigQuery中使用表通配符来聚合各个表(典型的BigQuery流用例的通用模型)。我知道BigQuery的人们也在考虑增加的表格流量限制,但没有官方要分享。

Net-net增加实例现在不会为您带来更多吞吐量。

另一种方法 - 在我们努力改进BigQuery同步的同时 - 将通过TextIO使用模式匹配对您的读取进行分片,然后针对X个表运行X个单独的管道。可能是一个有趣的实验。 : - )

有意义吗?