hadoop - HDFS 追加到 SequenceFile 很慢

标签 hadoop hdfs sequencefile

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

相关文章:

hadoop - 无法在 AWS EMR 中运行 oozie 工作流程

java - 如何在 mapreduce 中使用 MultipleInput 类?

hadoop - 如何为现有的 hadoop 集群部署 ambari

docker - docker 中的 Kafka 连接和 HDFS

java - Mahout:缺少创建序列文件的类

java - Hadoop 追加到 Sequencefile

hadoop - Hive:从列中选择具有最大值的行

hadoop - SemanticException 10072:数据库不存在(Sqoop)

hadoop - 从CSV文件加载到配置单元换行符

java - 具有Java类的Hive SequenceFile;只需传递给toString()