有没有办法在数据流作业运行过程中动态设置numWorkers?

时间:2016-05-18 03:24:54

标签: google-cloud-dataflow

我在工作中使用谷歌数据流 当我使用数据流时,我需要在数据流批处理作业运行时动态设置工作人员数量 这主要是因为云计算的QPS很大。 我们正在使用3个大型集群节点,他们无法立即接收来自500名员工的所有流量。
因此,在尝试将所有已处理的数据插入到bigtable之前,我必须更改工人数量(从500到25)。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:2)

数据流不能提供在批处理作业运行时手动更改批处理作业的资源分配的能力,但是:

1)我们计划将限制合并到我们的autoscaling algorithms中,因此Dataflow会在写入您的bigtable时检测到它需要缩小尺寸。我没有具体的ETA,但这绝对是我们的路线图。

2)同时,你试图通过这样的技巧人为地限制你的管道的并行性:

  • 将您的PCollection<Something>Something作为您正在写入bigtable的数据类型)
  • 通过一系列变换进行管道传输:ParDo(pair with a random key in 0..25)GroupByKeyParDo(ungroup and remove random key)。您再次获得PCollection<Something>
  • 将此集合写入Bigtable。

这里的诀窍是在GroupByKey之后的单个键中没有并行化,因此GroupByKey的结果是25个键值对的集合(其中值为{{1不能并行处理超过25名工作人员。跟随它的ParDo可能会与Bigtable的写作融合在一起,因此将具有25的并行性。

需要注意的是,如果Dataflow预测这会提高管道的性能,那么Dataflow就有权实现任何中间集合。 它甚至可能只是为了增加并行度(在此示例中明确违背您的目标)。但是如果您有紧急工作要运行,我相信现在这可能会做你想要的。

同时,在我们进行限制之前,我可以建议的唯一长期解决方案是对工作人员数量使用较小的限制,或使用较大的Bigtable群集,或两者都使用。

答案 1 :(得分:1)

GCP / Next的DATA & ANALYTICS: Analyzing 25 billion stock market events in an hour with NoOps on GCP讲话中有很多相关信息。

FWIW,你可以在批处理作业之前增加Bigtable的节点数,给Bigtable几分钟调整,然后开始你的工作。完成批处理作业后,您可以关闭Bigtable集群。