2017-02-27 77 views
0

我有一個應用程序,我在其中讀取HBase並將記錄寫入文件。 最終輸出應該是.zip壓縮格式,不支持hadoop格式。 爲此,我使用自定義的ZipFileOutputFormat獲取.zip文件中的記錄。ZipFileOutputFormat不以.zip格式提供輸出mapreduce

這是我實現

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格式得到任何錯誤,但我的輸出依然。

我在這裏是否缺少任何配置?

回答

0

我發現了這個問題。 後在作業下面設置的conf我的問題已被刪除

LazyOutputFormat.setOutputFormatClass(job, ZipFileOutputFormat.class); 

之前,它是

LazyOutputFormat.setOutputFormatClass(job, TextInputFormat.class); 

還設置

job.setOutputFormatClass(ZipFileOutputFormat.class);