0

附加到 SequenceFiles 似乎很慢。我们将文件夹(其中包含小文件)转换为 SequenceFiles,使用文件名作为键,内容作为值。但是,吞吐量非常低,大约为 2MB/s(每秒大约 2 到 3 个文件)。我们有澪。对于我们的目的而言,小文件和每秒最多 3 个文件的速度非常慢。

我们正在做的很简单:

for(String file : files) {
  byte[] data = Files.readAllBytes(Paths.get(dir.getAbsolutePath()
                    + File.separatorChar + file));
  byte[] keyBytes = l.getBytes("UTF-8");
  BytesWritable key = new BytesWritable(keyBytes);
  BytesWritable val = new BytesWritable(data);

  seqWriter.append(key, val);
}

关于如何加快速度的任何提示和想法?

4

1 回答 1

0

大多数时候,罪魁祸首是在编写压缩文件(例如,没有本地库支持的 gzip)。你没有提到你是如何设置的seqWriter,所以这只是一个猜测。

要加速的另一件事是批量或异步并行预取文件,因为下载小文件的延迟可能是瓶颈,而不是实际的附加操作。

如果追加是瓶颈,您还可以增加缓冲区大小。配置io.file.buffer.size(默认 4k​​)或使用BufferSizeOption选项将其传递给编写器构建器。

于 2016-05-02T15:01:53.377 回答