我想使用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的等效解决方案是什么?
答案 0 :(得分:1)
简短的回答是,我认为你现在不能。
更长的回答/咆哮。 Hadoop中的多个输出是一团糟。添加HBase,它会真的凌乱。今天存在的多输出“特征”看起来更像是一个“足够好”的脆弱的黑客。由于选项通常是作业范围的,因此几乎没有对单个输出的精细控制。
如果需要输出特定的压缩,那么最好的办法是通过扩展现有的OutputFormat来创建自己的OutputFormat。