附加到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/