寻找一些关于如何最好地架构/设计和构建我们的管道的建议。
经过一些初步测试,我们没有得到预期的结果。也许我们只是在做一些愚蠢的事情,或者我们的期望太高了。
我们的数据/工作流程:
- Google DFP 将我们的广告服务器日志(CSV 压缩)直接写入 GCS(每小时)。
- 这些日志一天的价值在 30-7000 万条记录范围内,一个月大约有 1.5-20 亿条记录。
- 对其中的 2 个字段执行转换,并将行写入 BigQuery。
- 转换涉及对其中 2 个字段执行 3 次 REGEX 操作(由于增加到 50 个操作),这会产生新的字段/列。
到目前为止,我们已经运行了什么:
- 构建了一个从 GCS 读取文件一天(31.3m)的管道,并使用 ParDo 执行转换(我们认为我们会从一天开始,但我们的要求也是处理数月和数年)。
- DoFn 输入是一个字符串,它的输出是一个 BigQuery TableRow。
- 管道在云中以实例类型“n1-standard-1”(1vCPU)执行,因为我们认为每个工作人员 1 个 vCPU 就足够了,因为转换不是过于复杂,也不是 CPU 密集型,即只是字符串到字符串的映射.
我们使用几种不同的工作器配置运行了该作业,以查看它的执行情况:
- 5 名工作人员(5 个 vCPU)耗时约 17 分钟
- 5 个工作人员(10 个 vCPU)花费了大约 16 分钟(在这次运行中,我们将实例提升到“n1-standard-2”以获得双倍的内核,看看它是否提高了性能)
- 自动缩放设置为“BASIC”(50-100 个 vCPU)的 50 分钟和最多 100 个工作人员花费了大约 13 分钟
- 自动缩放设置为“BASIC”(100-150 个 vCPU)的 100 分钟和 150 个最大工作人员花费了大约 14 分钟
这些时间是否符合您对我们的用例和管道的期望?