Hadoop добавляется в Sequencefile

В настоящее время я использую следующий код для добавления к существующему файлу SequenceFile:

// initialize sequence writer
Writer writer = SequenceFile.createWriter(
        FileContext.getFileContext(this.conf), 
        this.conf, 
        new Path("/tmp/sequencefile"), 
        Text.class,
        BytesWritable.class, 
        CompressionType.NONE,
        null, 
        new Metadata(),
        EnumSet.of(CreateFlag.CREATE, CreateFlag.APPEND), 
        CreateOpts.blockSize(64 * 1024 * 1024));

writer.append(key, value);

// close writer
writer.hsync();
writer.close();

Все работает, если файл последовательности не существует, но когда файл существует, Hadoop снова записывает заголовок SequenceFile (SEQ ...) в середине файла, и файл становится нечитаемым для Hadoop.

Я использую Хадуп 2.6.0


person Christian D.    schedule 03.02.2015    source источник


Ответы (1)


Я думаю, что невозможно добавить к существующему файлу последовательности. Я проанализировал исходный код 2.5.2 и 2.6.0-CDH5.5. В каждом конструкторе Writer записывается "Заголовок файла последовательности" (из функции инициализации).

Существует путь для поддержки этой функции https://issues.apache.org/jira/browse/HADOOP-7139, но он не выпущен в официальный выпуск.

ОБНОВЛЕНИЕ: Проблема HADOOP-7139 теперь закрыта и с версии 2.6.1/2.7.2 возможно добавление к существующему SequenceFile :)

person dpolaczanski    schedule 12.03.2015