附加到 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);
}
关于如何加快速度的任何提示和想法?
最佳答案
大多数时候,罪魁祸首是在编写压缩文件(例如,没有 native lib 支持的 gzip)。您没有提到如何设置 seqWriter
,所以这只是一个猜测。
要加速的另一件事是批量或异步并行预取文件,因为下载小文件的延迟可能是瓶颈,而不是实际的附加操作。
如果追加是瓶颈,您还可以增加缓冲区大小。要么配置io.file.buffer.size
(默认 4k)或使用 BufferSizeOption
将其传递给编写器构建器选项。
关于hadoop - HDFS 追加到 SequenceFile 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985306/