附加到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);
}
关于如何加快速度的任何提示,想法?
答案 0 :(得分:0)
大多数情况下,罪魁祸首是编写压缩文件(例如没有本机lib支持的gzip)。你没有提到你如何设置seqWriter
,所以这只是猜测。
加速的另一个方面是批量预取文件或异步并行地预取文件,因为下载小文件的延迟可能是瓶颈而不是实际的附加操作。
如果append是瓶颈,您还可以增加缓冲区大小。配置io.file.buffer.size
(默认为4k)或使用BufferSizeOption
选项将其传递到编写器构建器。