在Hadoop中,多个reducer如何只输出一个零件文件?
在我的map reduce作业中,我使用4个reducer来实现reducer作业。这样,最终输出将生成4个零件文件。:part-0000 part-0001 part-0002 part-0003在Hadoop中,多个reducer如何只输出一个零件文件?,hadoop,Hadoop,在我的map reduce作业中,我使用4个reducer来实现reducer作业。这样,最终输出将生成4个零件文件。:part-0000 part-0001 part-0002 part-0003 我的问题是,如何设置hadoop的配置,使其只输出一个部件文件,尽管hadoop使用了4个简化程序来工作?这不是hadoop所期望的行为。但是您可以在这里使用多路输出。 创建一个命名的输出,并在所有简化程序中使用它,以在一个文件本身中获得最终输出。javadoc本身建议如下: JobConf co
我的问题是,如何设置hadoop的配置,使其只输出一个部件文件,尽管hadoop使用了4个简化程序来工作?这不是hadoop所期望的行为。但是您可以在这里使用
多路输出
。
创建一个命名的输出,并在所有简化程序中使用它,以在一个文件本身中获得最终输出。javadoc本身建议如下:
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();
...
}
}
公共类MOReduce实现
减速器{
私人多路输出mos;
公共void配置(JobConf conf){
...
mos=新的多路输出(配置);
}
public void reduce(可写可比键、迭代器值、,
OutputCollector输出,报告器(报告器)
抛出IOException{
...
getCollector(“text”,reporter).collect(key,newtext(“Hello”);
...
}
public void close()引发IOException{
mos.close();
...
}
}
如果您正在使用新的mapreduce
API,请参阅
这里的
text
是输出目录或一个名为text
?的大文件,我知道了!我知道不建议多个还原程序只输出一个文件。谢谢@Amar@user2052141不客气。如果你觉得有用的话,你应该投票选出答案
MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class,
LongWritable.class, Text.class);