【发布时间】:2015-04-23 06:00:27
【问题描述】:
我知道几周前对 CDF 服务进行了更新(默认工作器类型和附加的 PD 已更改),并且很明显它会使批处理作业变慢。然而,我们的工作表现已经下降到无法真正满足我们的业务需求。
例如,特别是对于我们的一项工作:它从 BigQuery 中的一个表中读取约 270 万行,有 6 个侧输入(BQ 表),进行一些简单的字符串转换,最后将多个输出 (3) 写入大查询。这过去需要 5 到 6 分钟,而现在需要 15 到 20 分钟 - 无论我们使用多少虚拟机。
我们可以做些什么来让速度恢复到我们以前看到的速度?
以下是一些统计数据:
- 从包含 2,744,897 行 (294MB) 的 BQ 表中读取数据
- 6 个 BQ 侧输入
- 3 个多路输出到 BQ,其中 2 个是 2,744,897 行,其他 1,500 行
- 在 asia-east1-b 区域运行
- 以下时间包括工作池启动和关闭
10 个虚拟机 (n1-standard-2) 16 分 5 秒 2015-04-22_19_42_20-4740106543213058308
10 个虚拟机 (n1-standard-4) 17 分 11 秒 2015-04-22_20_04_58-948224342106865432
10 个虚拟机 (n1-standard-1) 18 分 44 秒 2015-04-22_19_42_20-4740106543213058308
20 台虚拟机 (n1-standard-2) 22 分 53 秒 2015-04-22_21_26_53-18171886778433479315
50 台虚拟机 (n1-standard-2) 17 分 26 秒 2015-04-22_21_51_37-16026777746175810525
100 个虚拟机 (n1-standard-2) 19 分 33 秒 2015-04-22_22_32_13-9727928405932256127
【问题讨论】:
-
我查看了其中一项作业的步骤执行日志,似乎大部分时间(大约 17 分钟中的 9 分钟)已用于导入已由步骤写入的数据进入 BQ。我们将研究为什么这个导入过程变得如此缓慢。
-
在您弄清楚为什么它变得如此缓慢之前,我可以使用一种解决方法吗?
-
一位队友建议,速度缓慢可能是由于新 SDK 处理侧输入的方式发生了变化 - 请您查看 stackoverflow.com/questions/29718820/… 并检查它是否与您的工作相关?
-
另外,请参阅stackoverflow.com/questions/29685886/… 了解调试 BiqQuery 导出作业的提示 - 也许这些统计信息对您的性能调试很有用。如果这些都没有帮助,请告诉我。
-
@jkff WRT 到第一个链接,我们在第一次调用 processElement() 时缓存侧输入。我们过去是从 startBundle() 开始的,但当然 API 在上一个版本中发生了变化,所以我们将它移到了 processElement()。