google dataflow写入扳手会创建数百名工作人员将79G文件写入表中

时间:2018-04-05 19:32:05

标签: google-cloud-dataflow google-cloud-spanner

我正在尝试将79G文件写入Google扳手中的单个表格中。该表有1个字符串键列,13个字符串列和4个字符串数组列。我正在使用Google cloud dataflow spanner examples为我创建的表修改的示例。在79G文件上抛出io.grpc.StatusRuntimeException: INVALID_ARGUMENT: The transaction contains too many mutations.(它与一个小的示例文件一起工作正常)。没有从数据流作业写入数据库。

为了解决这个问题,我按照建议here的建议,将写入的批量大小设置为1KB:SpannerIO.write().withBatchSizeBytes(1024)
这导致数据流作业自动缩放到> 300名工作人员,图表似乎表明需要大约18个小时。这个数据集的预期行为是这么大吗?问题是批量大小?如果是这样,建议的大小是什么,以避免在保持负载时间较低的情况下发生过多突变的异常?

1 个答案:

答案 0 :(得分:1)

这将通过the following pull修复。当前限制是20k变异列值(包括索引),如果您知道记录的大小,则可以估计大致的批量大小。我建议您使用--maxNumWorkers flag限制最大数量的工作人员。

如果你有很多空值,你可以做的一件事是跳过变异构建器中的空字段,因此它们不算作突变。在这种情况下,我认为您可以安全地尝试10-100K的批量大小。