Hadoop的:如何输出不同的格式类型相同的工作?(Hadoop: How to output di

2019-09-24 07:01发布

我想输出gziplzo在一个工作的同时格式。

我用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格式。

有人能帮助我吗? 谢谢!

================================================== ========================

更多:

我只是看着的源代码setOutputCompressorClassFileOutputFormat ,其中conf.setClass("mapred.output.compression.codec", codecClass, CompressionCodec.class);

看来,当setOutputCompressorClass被称为mapred.output.compression.codec在配置将被重置。

因此,实际压缩格式是我们设定在最后一个,我们不能在同一作业设置两个不同的压缩格式? 还是有别的东西忽略?

Answer 1:

所以,也许作为一个变通办法,尝试在配置上直接设置正确outputCompressorClass

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

之前你写调用每个输出。 它看起来像没有被MultipleOutputs处理不好比重点班,价值类和输出路径之外的任何输出格式的配置参数,我们可能不得不写一些代码,以抵消监督。



文章来源: Hadoop: How to output different format types in the same job?