HDFS Append to SequenceFile медленно

Добавление к SequenceFiles кажется очень медленным. Мы преобразуем папки (с небольшими файлами в нем) в SequenceFiles, используя имя файла в качестве ключа и содержимое в качестве значения. Однако пропускная способность довольно низкая, около 2 МБ/с (около 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 ответ

  1. Большую часть времени виновник пишет сжатые (например, gzip без родной поддержки lib). Вы не упомянули, как вы настраиваетеseqWriter, так что это просто догадка.

    Другое дело, чтобы ускорить было бы prefetch файлы в пакетах или асинхронно и параллельно, как задержка для загрузки небольших файлов может быть узким местом, а не фактические операции добавления.

    Если добавление является узким местом, можно также увеличить размер буфера. Настройте io.file.buffer.size(по умолчанию 4k) или передайте его в Writer builder с помощью BufferSizeOptionопции.