附加到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);
}

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

最佳答案

多数情况下,罪魁祸首是编写压缩文件(例如,不支持本机lib的gzip)。您没有提到如何设置seqWriter,所以这只是一个猜测。

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

如果添加是瓶颈,则还可以增加缓冲区大小。配置io.file.buffer.size(默认为4k),或使用BufferSizeOption选项将其传递到writer构建器中。

关于hadoop - HDFS附加到SequenceFile的速度很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36985306/

10-12 23:00