ZipFileOutputFormat не выдает выходные данные в формате.zip mapreduce

У меня есть приложение, где я читаю HBase и записываю записи в файлы. Окончательный вывод должен быть в сжатом формате.zip, а не в формате, поддерживаемом hasoop. Для этого я использовал пользовательский ZipFileOutputFormat для получения записей в.zip файлах.

Вот моя реализация

ZipFileOutputFormat.setOutputPath(job, new Path(args[1]));

Это детали ZipFileOutputFormat.class

public class ZipFileOutputFormat extends FileOutputFormat<NullWritable, Text> {
    @Override
    public RecordWriter<NullWritable, Text> getRecordWriter(
            TaskAttemptContext job) throws IOException, InterruptedException {
        Path file = getDefaultWorkFile(job, ".zip");

        FileSystem fs = file.getFileSystem(job.getConfiguration());

        return new ZipRecordWriter(fs.create(file, false));
    }

    public static class ZipRecordWriter extends
            RecordWriter<NullWritable, Text> {
        protected ZipOutputStream zos;

        public ZipRecordWriter(FSDataOutputStream os) {
            zos = new ZipOutputStream(os);
        }

        @Override
        public void write(NullWritable key, Text value) throws IOException,
                InterruptedException {
            // TODO: create new ZipEntry & add to the ZipOutputStream (zos)
        }

        @Override
        public void close(TaskAttemptContext context) throws IOException,
                InterruptedException {
            zos.close();
        }
    }
}

Я не получаю никакой ошибки, но мой вывод все еще в формате r-000001.

Я пропустил какую-либо конфигурацию здесь?

1 ответ

Я нашел проблему. После настройки ниже в conf работы моя проблема была удалена

LazyOutputFormat.setOutputFormatClass(job, ZipFileOutputFormat.class);

Прежде чем это было

LazyOutputFormat.setOutputFormatClass(job, TextInputFormat.class);

Также установлено

job.setOutputFormatClass(ZipFileOutputFormat.class);
Другие вопросы по тегам