Google cloud dataflow WithHintMatchesMany文件真的能在读取大量文件时提高TextIO的性能吗?

Google cloud dataflow WithHintMatchesMany文件真的能在读取大量文件时提高TextIO的性能吗?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,在这方面,我们知道 PCollection行=p.apply(TextIO.read() .from(“gs://some bucket/many/files/*”) .WithintMatchesManyFiles()); 使用此提示会使转换以一种为读取大型数据而优化的方式执行 文件数量:在这种情况下,可以读取的文件数量实际上是无限的, 而且最有可能的是,管道将比没有这一暗示运行得更快、更便宜、更可靠 然而,管道的步骤被代码卡住,如下所示 PCollection line=pipeline.

在这方面,我们知道

PCollection行=p.apply(TextIO.read()
.from(“gs://some bucket/many/files/*”)
.WithintMatchesManyFiles());
使用此提示会使转换以一种为读取大型数据而优化的方式执行 文件数量:在这种情况下,可以读取的文件数量实际上是无限的, 而且最有可能的是,管道将比没有这一暗示运行得更快、更便宜、更可靠

然而,管道的步骤被代码卡住,如下所示

PCollection line=pipeline.apply(“readDataFromGCS”,
TextIO.read().from(sourcePath+“/前缀*”)
.withHintMatchesManyFiles()中的
.watchForNewFiles(Duration.standardMinutes(1),Watch.Growth.never());
每分钟有大约10~30MB的新文件上传到GCS

但是,我们尝试从中读取文件,管道可以很好地工作

raw\u event=p.apply(“读取子消息”,publisubio.readStrings().fromTopic(options.getTopic()))
.apply(“提取文件名”,ParDo.of(新提取文件名fn()))
.apply(“读取文件matchall”,FileIO.matchall())
.apply(“读取文件匹配”,FileIO.readMatches())
.apply(“读取文件”,TextIO.readFiles());
我这里缺什么?或者有没有其他方法可以更有效地从GCS读取大量文件


我的管道的工作流程是从GCS读取数据,并在数据处理后接收到发布/订阅


Beam版本:2.16.0

当您尝试通过数据流使用TextIO.read()读取压缩/压缩文件时,压缩文件只能由单个辅助程序和所述辅助程序的单个线程解压。这会导致管道等待单个工作者解压缩所有数据,因此,系统会输出一条警告消息,指出管道已被卡住,但实际上,管道未被卡住,只是试图解压缩数据。此时,流式传输数据时没有并行解压缩。

您是否使用BQ作为目的地?@jjayadeep,接收器为Pub/sub您使用的是什么版本的beam?另外,平均有多少个文件?@jjayadeep,每2分钟大约有8~10个zip文件,文件大小为10M字节。从这个链接来看,我使用的beam版本是2.16,它看起来像是
带有HintMatchesManyFiles
并不是为少数文件而设计的。你能删除提示,看看这是否解决了你的问题吗?