Hadoop:如何在同一个作业中输出不同的格式类型? (第二部分)

时间:2015-11-23 23:58:55

标签: hadoop

我想使用MultipleOutputs在同一个reducer中编写压缩和非压缩文件,但它似乎是全有或全无。如果我这样做:

    MultipleOutputs.addNamedOutput(job, "ToGzip", TextOutputFormat.class, NullWritable.class, Text.class);
    TextOutputFormat.setCompressOutput(job, true);
    TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

它会压缩所有内容,而不仅仅是我想要的文件。如果你看一下这个非常相似的问题:

Hadoop: How to output different format types in the same job?

你会看到它会解决我的问题,但是它使用了旧的界面而新的界面却没有:

context.getConfiguration().setOutputCompressorClass(GzipCodec.class); 

新Hadoop API的等效解决方案是什么?

1 个答案:

答案 0 :(得分:1)

简短的回答是,我认为你现在不能。

更长的回答/咆哮。 Hadoop中的多个输出是一团糟。添加HBase,它会真的凌乱。今天存在的多输出“特征”看起来更像是一个“足够好”的脆弱的黑客。由于选项通常是作业范围的,因此几乎没有对单个输出的精细控制。

如果需要输出特定的压缩,那么最好的办法是通过扩展现有的OutputFormat来创建自己的OutputFormat。