首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据流如何执行并行处理?

数据流如何执行并行处理?
EN

Stack Overflow用户
提问于 2020-11-19 09:20:55
回答 2查看 1.5K关注 0票数 1

我正在使用用于Mysql到Bigquery数据管道的数据流。为此,我使用JDBC来实现Bigquery数据流模板。

在使用dataflow GUI创建作业时,我可以明确地设置最大工人数,即工人总数。

但问题是,如果我提到两个n1-standard-4大小的工人,就会在一段时间内创建两个工人,并自动删除一个工人。为什么两名工人都没有跑到完全操作呢?

而且,即使我使用1或2个工作人员,经过的时间也没有差别。根据我的理解,如果我用两个工人而不是一个工人,时间应该是一半。在GCS桶临时文件夹中创建的文件没有相同。

数据流如何管理其员工?它如何执行并行处理?我应该如何决定我的工作所需要的工人的数量和类型?

EN

回答 2

Stack Overflow用户

发布于 2020-11-19 13:04:15

Beam框架实现了类似于Map-约简的东西。您可以将映射并行化(ParDo ->表示并行Do),也不能并行化减少(GroupBy) (至少,并非所有GroupBy都可以并行化)。

因此,根据您的管道,Beam能够高效地将消息分派给每个工作人员并行处理,然后等待执行GroupBy。可伸缩性对于复杂管道非常有用,特别是当您有多个条目和/或多个输出时。

在您的例子中,您的管道非常简单:没有转换(您可以并行完成)。简单地读和写。你想并行化什么?你不需要有几个工人来做这个!

最后一点:您使用的接收器(此处为BigQuery )可以具有与管道运行模式不同的行为。

  • 如果您在批处理模式下运行管道(您的情况),BigQuery.IO只需在Cloud暂存桶中获取数据并创建文件。然后,在最后,触发正确表中所有文件的唯一加载作业。
  • 如果以流模式运行管道,BigQuery.IO将执行流写入BigQuery。

这种模式会影响并行化能力和可能的工作人员数量。

票数 0
EN

Stack Overflow用户

发布于 2020-11-19 15:15:58

有几个合理的理由可以说明,你的数据流程工作直到最后才能留住这两名员工:

-1:要么是完整的作业,要么是某个任务不可并行。数据流将移除第二个员工,以便您在员工空闲时不会产生额外的成本。

-2:如果工作人员在两分钟内平均使用不足75%的CPU,并且流式管道待办事项少于10秒(1),则为

请记住,缩小不会自动发生,因为数据流在这个意义上是保守的。通常,Dataflow将花费更多的时间尝试添加员工,而不是使用他们。正因为如此,当你期望一个高工作量和尖峰,这是明智的设置一个高起点的工人人数。

另一方面,如果只使用两名工人中的一名,无论你将工人人数定为1名或2名,总时间都是一样的,为了更好地理解这个概念,我举一个例子:

假设您有一个生成伪随机数序列的算法,其中每个值的计算都依赖于最后一个数。这是一个任务,不管你有1或100名工人,它将始终以相同的速度工作。但同时,对于其他用例,例如,如果每个数字不依赖于前一个用例,则这个任务将以100名工作人员的速度大约快100倍。

总之,Dataflow考虑每个任务的可并行性,并根据(1)中所述的规则向上和向下扩展。更多的工人可能会更快,也可能不会更快,但成本会更高。

请查看(2),以便更好地了解Dataflow中的并行化和分布。我还发现了这两个堆栈溢出问题(3.)和(4.),它们可能有助于阐明您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64908691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档