【问题标题】:Facing Performance issue while reading files from GCS using apache beam使用 apache Beam 从 GCS 读取文件时面临性能问题
【发布时间】:2020-05-23 05:46:51
【问题描述】:

我试图从 gcs 路径中使用通配符读取数据。我的文件是 bzip2 格式,大约 300k 文件位于 gcs 路径中,具有相同的通配符表达式。我正在使用下面的代码 sn-p 来读取文件。

    PCollection<String> val = p
            .apply(FileIO.match()
                    .filepattern("gcsPath"))
            .apply(FileIO.readMatches().withCompression(Compression.BZIP2))
            .apply(MapElements.into(TypeDescriptor.of(String.class)).via((ReadableFile f) -> {
                try {
                    return f.readFullyAsUTF8String();
                } catch (IOException e) {
                    return null;
                }
            }));

但性能很差,以当前速度使用上述代码读取该文件大约需要 3 天时间。有没有我可以在云数据流中使用的替代 api 从 gcs 读取这么多文件,当然性能很好。我之前使用过 TextIO,但由于模板序列化限制为 20MB,它失败了。

【问题讨论】:

  • 300k 文件的总传输大小是多少?
  • 它是在 Dataflow 上运行还是在您的计算机上运行?
  • @ParthMehta 总传输大小约为 1 TB。
  • 根据 chamikara 评论修复模板大小错误后,如果您使用 TextIO 也可以使用beam.apache.org/releases/javadoc/2.19.0/org/apache/beam/sdk/io/…
  • @RezaRokni 我刚刚看到你的回答,但我昨天得到了同样的解决方案。感谢您的帮助。

标签: google-cloud-platform google-cloud-dataflow apache-beam apache-beam-io


【解决方案1】:

下面的 TextIO() 代码解决了这个问题。

PCollection<String> input = p.apply("Read file from GCS",TextIO.read().from(options.getInputFile())
                        .withCompression(Compression.AUTO).withHintMatchesManyFiles()
                        );              

withHintMatchesManyFiles() 解决了这个问题。但我仍然不知道 FileIO 的性能有多差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多