在map reduce作业中,我使用4个reducer来实现reducer作业。因此,通过这样做,最终输出将生成4个零件文件。:part-0000 part-0001 part-0002 part-0003我的问题是如何设置hadoop的配置以只输出一个部件文件,尽管hadoop使用4个reducer来工作?
tmb3ates1#
这不是hadoop所期望的行为。但你可以用 MultipleOutputs 对你有利。创建一个命名的输出,并在所有的reducer中使用它来获得一个文件本身的最终输出。javadoc本身建议如下:
MultipleOutputs
JobConf conf = new JobConf(); conf.setInputPath(inDir); FileOutputFormat.setOutputPath(conf, outDir); conf.setMapperClass(MOMap.class); conf.setReducerClass(MOReduce.class); ... // Defines additional single text based output 'text' for the job MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class, LongWritable.class, Text.class);; ... JobClient jc = new JobClient(); RunningJob job = jc.submitJob(conf); ...
作业配置使用模式为:
public class MOReduce implements Reducer<WritableComparable, Writable> { private MultipleOutputs mos; public void configure(JobConf conf) { ... mos = new MultipleOutputs(conf); } public void reduce(WritableComparable key, Iterator<Writable> values, OutputCollector output, Reporter reporter) throws IOException { ... mos.getCollector("text", reporter).collect(key, new Text("Hello")); ... } public void close() throws IOException { mos.close(); ... } }
如果您使用的是新的 mapreduce 然后看这里。
mapreduce
ohtdti5x2#
MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class, LongWritable.class, Text.class);
在这里 text 输出目录或单个大文件名为 text ?
text
2条答案
按热度按时间tmb3ates1#
这不是hadoop所期望的行为。但你可以用
MultipleOutputs
对你有利。创建一个命名的输出,并在所有的reducer中使用它来获得一个文件本身的最终输出。javadoc本身建议如下:作业配置使用模式为:
如果您使用的是新的
mapreduce
然后看这里。ohtdti5x2#
在这里
text
输出目录或单个大文件名为text
?