分析云数据流 BigQuery 吞吐量/流水线
Analyze Cloud Data Flow BigQuery Throughput / Pipelining
我正在尝试弄清楚 DataFlow 如何扩展某些操作以及如何使其表现最佳。首先,我刚刚创建了一个简单的流程,它从 BigQuery 中读取数据(约 2500 万行,总共 30GB),进行 JSON 提取,一个简单的按键分组,然后按分组进行一次聚合(每个约 100 个元素) ,并对每个键进行另一个转换并将其放回新的 table(~500k 行,总共 25gb)。
此管道的总执行时间在 10-18 分钟之间,具体取决于我分配的工作人员数量或我是否使用多核机器等。我无法将其速度提高到低于此值。我还没有确定确切的阈值,但基本上 20 个单核或 10 个四核之间的差异不再可靠地测量。
所以我的问题是如何进一步调查并找出哪个步骤花费的时间最多以及我如何改进它。我假设 DataFlow 本身负责扩展各个步骤并在它们之间进行平衡。但是对我来说,例如现在看到收到的第一条消息和最后一条消息发送,以及每步随时间变化的吞吐量可能会很有趣。这是某处可用的东西,还是我必须自己开始检测和记录?有了这些信息,我将开始基于此优化各个步骤,并可能覆盖 DataFlows 缩放。
这是正确的方法吗,还是有更好的方法可用?
** 我的目标时间是减少到 2 分钟。
Dataflow 首先执行 BigQuery 导出作业以将您的数据复制到 GCS,然后再读入并处理它。同样,Dataflow 将数据写入 GCS,然后执行 BigQuery 导入作业以加载 table.
如果您查看作业消息 and/or 日志,您应该能够看到导出作业何时完成(并且您的代码开始从导出的文件中读取)以及导入作业何时开始(以及您的代码已完成写入所有输出数据)。如果 10-18 分钟的大部分时间花在 BigQuery import/export 作业上,那么调整管道不会对性能产生重大影响。
其他常见问题是有一个或两个特别热的密钥(例如,包含大部分数据)。从你的描述来看,情况似乎并非如此(你提到每个键都有大约 100 个元素)。
我正在尝试弄清楚 DataFlow 如何扩展某些操作以及如何使其表现最佳。首先,我刚刚创建了一个简单的流程,它从 BigQuery 中读取数据(约 2500 万行,总共 30GB),进行 JSON 提取,一个简单的按键分组,然后按分组进行一次聚合(每个约 100 个元素) ,并对每个键进行另一个转换并将其放回新的 table(~500k 行,总共 25gb)。
此管道的总执行时间在 10-18 分钟之间,具体取决于我分配的工作人员数量或我是否使用多核机器等。我无法将其速度提高到低于此值。我还没有确定确切的阈值,但基本上 20 个单核或 10 个四核之间的差异不再可靠地测量。
所以我的问题是如何进一步调查并找出哪个步骤花费的时间最多以及我如何改进它。我假设 DataFlow 本身负责扩展各个步骤并在它们之间进行平衡。但是对我来说,例如现在看到收到的第一条消息和最后一条消息发送,以及每步随时间变化的吞吐量可能会很有趣。这是某处可用的东西,还是我必须自己开始检测和记录?有了这些信息,我将开始基于此优化各个步骤,并可能覆盖 DataFlows 缩放。
这是正确的方法吗,还是有更好的方法可用?
** 我的目标时间是减少到 2 分钟。
Dataflow 首先执行 BigQuery 导出作业以将您的数据复制到 GCS,然后再读入并处理它。同样,Dataflow 将数据写入 GCS,然后执行 BigQuery 导入作业以加载 table.
如果您查看作业消息 and/or 日志,您应该能够看到导出作业何时完成(并且您的代码开始从导出的文件中读取)以及导入作业何时开始(以及您的代码已完成写入所有输出数据)。如果 10-18 分钟的大部分时间花在 BigQuery import/export 作业上,那么调整管道不会对性能产生重大影响。
其他常见问题是有一个或两个特别热的密钥(例如,包含大部分数据)。从你的描述来看,情况似乎并非如此(你提到每个键都有大约 100 个元素)。