Google cloud platform PCollection中的项目数不影响分配的工人数
我有一个由三个步骤组成的管道。第一步是ParDo,它在一个PCollection中接受5个URL。这5项中的每一项都会生成数千个URL并输出。所以第二步的输入是另一个PCollection,其大小可以是100-400k。在最后一步中,将每个url的刮取输出保存到存储服务中 我注意到,第一步是在5个输入url中生成url列表,这一步分配了5个工人,并生成了一组新的url。但一旦第一步完成,没有工人会减少并达到1。当第二步运行时,它只运行在一个worker中(有一个worker,我的数据流在过去2天内运行,因此通过查看日志,我可以合理地假设第一步已经完成)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天
因此,我的问题是,尽管PCollection的规模很大,但为什么不在员工之间进行分配,或者为什么没有分配更多的员工?第2步是一个简单的web刮板,它刮取给定的url并输出一个字符串。数据流尝试将步骤连接在一起以创建融合的步骤。因此,即使您的管道中有几个
ParDo
s,它们也会融合在一起,并作为单个步骤执行
同样,一旦融合,数据流的缩放也会受到融合步骤开头的步骤的限制
我怀疑您有一个Create
转换,它由管道顶部的几个元素组成。在这种情况下,数据流只能扩展到此Create
转换中的元素数
防止这种行为的一种方法是在一次(或多次)高扇出ParDo
变换后进行中断融合。这可以通过在转换之后添加一个转换来完成(它包含一个GroupByKey
)。鉴于Reshuffle
是一种身份转换,您的管道不需要额外的更改
有关融合和防止融合的方法的更多信息,请参阅。数据流尝试将步骤连接在一起以创建融合步骤。因此,即使您的管道中有几个
ParDo
s,它们也会融合在一起,并作为单个步骤执行
同样,一旦融合,数据流的缩放也会受到融合步骤开头的步骤的限制
我怀疑您有一个Create
转换,它由管道顶部的几个元素组成。在这种情况下,数据流只能扩展到此Create
转换中的元素数
防止这种行为的一种方法是在一次(或多次)高扇出ParDo
变换后进行中断融合。这可以通过在转换之后添加一个转换来完成(它包含一个GroupByKey
)。鉴于Reshuffle
是一种身份转换,您的管道不需要额外的更改
有关融合和防止融合的方法的更多信息,请参阅