Google cloud platform PCollection中的项目数不影响分配的工人数

Google cloud platform PCollection中的项目数不影响分配的工人数,google-cloud-platform,google-cloud-dataflow,apache-beam,dataflow,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Dataflow,我有一个由三个步骤组成的管道。第一步是ParDo,它在一个PCollection中接受5个URL。这5项中的每一项都会生成数千个URL并输出。所以第二步的输入是另一个PCollection,其大小可以是100-400k。在最后一步中,将每个url的刮取输出保存到存储服务中 我注意到,第一步是在5个输入url中生成url列表,这一步分配了5个工人,并生成了一组新的url。但一旦第一步完成,没有工人会减少并达到1。当第二步运行时,它只运行在一个worker中(有一个worker,我的数据流在过去2天

我有一个由三个步骤组成的管道。第一步是ParDo,它在一个PCollection中接受5个URL。这5项中的每一项都会生成数千个URL并输出。所以第二步的输入是另一个PCollection,其大小可以是100-400k。在最后一步中,将每个url的刮取输出保存到存储服务中

我注意到,第一步是在5个输入url中生成url列表,这一步分配了5个工人,并生成了一组新的url。但一旦第一步完成,没有工人会减少并达到1。当第二步运行时,它只运行在一个worker中(有一个worker,我的数据流在过去2天内运行,因此通过查看日志,我可以合理地假设第一步已经完成)


因此,我的问题是,尽管PCollection的规模很大,但为什么不在员工之间进行分配,或者为什么没有分配更多的员工?第2步是一个简单的web刮板,它刮取给定的url并输出一个字符串。数据流尝试将步骤连接在一起以创建融合的步骤。因此,即使您的管道中有几个
ParDo
s,它们也会融合在一起,并作为单个步骤执行

同样,一旦融合,数据流的缩放也会受到融合步骤开头的步骤的限制

我怀疑您有一个
Create
转换,它由管道顶部的几个元素组成。在这种情况下,数据流只能扩展到此
Create
转换中的元素数

防止这种行为的一种方法是在一次(或多次)高扇出
ParDo
变换后进行中断融合。这可以通过在转换之后添加一个转换来完成(它包含一个
GroupByKey
)。鉴于
Reshuffle
是一种身份转换,您的管道不需要额外的更改


有关融合和防止融合的方法的更多信息,请参阅。

数据流尝试将步骤连接在一起以创建融合步骤。因此,即使您的管道中有几个
ParDo
s,它们也会融合在一起,并作为单个步骤执行

同样,一旦融合,数据流的缩放也会受到融合步骤开头的步骤的限制

我怀疑您有一个
Create
转换,它由管道顶部的几个元素组成。在这种情况下,数据流只能扩展到此
Create
转换中的元素数

防止这种行为的一种方法是在一次(或多次)高扇出
ParDo
变换后进行中断融合。这可以通过在转换之后添加一个转换来完成(它包含一个
GroupByKey
)。鉴于
Reshuffle
是一种身份转换,您的管道不需要额外的更改

有关融合和防止融合的方法的更多信息,请参阅