我想输出gzip
和lzo
在一个工作的同时格式。
我用MultipleOutputs
,并添加两个名为输出是这样的:
MultipleOutputs.addNamedOutput(job, "LzoOutput", GBKTextOutputFormat.class, Text.class, Text.class);
GBKTextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);
MultipleOutputs.addNamedOutput(job, "GzOutput", TextOutputFormat.class, Text.class, Text.class);
TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
( GBKTextOutputFormat
这里是我自己写的延伸FileOutputFormat
)
他们像减速使用:
multipleOutputs.write("LzoOutput", NullWritable.get(), value, "/user/hadoop/lzo/"+key.toString());
multipleOutputs.write("GzOutput", NullWritable.get(), value, "/user/hadoop/gzip/"+key.toString());
其结果是:
我可以在两路输出,但他们都在gzip
格式。
有人能帮助我吗? 谢谢!
================================================== ========================
更多:
我只是看着的源代码setOutputCompressorClass
在FileOutputFormat
,其中conf.setClass("mapred.output.compression.codec", codecClass, CompressionCodec.class);
看来,当setOutputCompressorClass被称为mapred.output.compression.codec在配置将被重置。
因此,实际压缩格式是我们设定在最后一个,我们不能在同一作业设置两个不同的压缩格式? 还是有别的东西忽略?