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);