在Hadoop中,多个reducer如何只输出一个零件文件?

在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

在我的map reduce作业中,我使用4个reducer来实现reducer作业。这样,最终输出将生成4个零件文件。:part-0000 part-0001 part-0002 part-0003


我的问题是,如何设置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);