为什么 Google Cloud Dataflow 无法扩展到启用自动扩展且没有配额限制的目标工作人员

Why Google Cloud Dataflow doesn't scale to target workers with autoscaling enabled and no quota limitations

我正在 运行 连接数据流管道来解析存储在云存储桶中的大约 45000 个文本文件。解析后的文本被转换为 JSON 并写入文本文件,以便随后在 BigQuery 中加载(不是管道的一部分)。管道启动几分钟后,目标工人的数量增加到 > 30(确切数量在 运行s 之间略有不同),但实际工人的数量仍然停留在 1.

我检查过的东西:

如果我让管道 运行 它在大约 2 小时内成功完成,但我希望如果实际工作人员能够扩展到目标,这会 运行 快得多。

这里是代码的相关部分:

client = storage.Client()
blobs = client.list_blobs(bucket_name)

rf = [b.name for b in blobs]

with beam.Pipeline(options=pipeline_options) as p:
    json_list = (p | 'Create filelist' >> beam.Create(rf)
                   | 'Get string' >> beam.Map(getstring)
                   | 'Filter empty strings' >> beam.Filter(lambda x: x != "")
                   | 'Get JSON' >> beam.Map(getjson)
                   | 'Write output' >> WriteToText(known_args.output))

关于是什么阻止了工人扩大规模,有什么建议吗?

这里的问题是此管道中没有可用的并行性。 Create 转换是单分片的,管道中的所有其他内容都与之融合在一起。在创建之后使用内置文件读取转换之一,例如 ReadFromText will solve this, or you can put a Reshuffle 转换,以便将管道分成两个独立的阶段。