HDFS附加到SequenceFile很慢

时间:2016-05-02 14:47:33

标签: hadoop hdfs sequencefile

附加到SequenceFiles似乎非常慢。我们将文件夹(其中包含小文件)转换为SequenceFiles,使用文件名作为键,内容作为值。但是,吞吐量非常低,大约2MB / s(每秒大约2到3个文件)。我们有Mio.对于我们的目的而言,小文件和每秒最多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);
}

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

1 个答案:

答案 0 :(得分:0)

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

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

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