Je suis un débutant dans Hadoop. J'essaie le programme Wordcount.MultipleOutputFormat dans hadoop
Maintenant, pour essayer plusieurs fichiers de sortie, j'utilise MultipleOutputFormat
. ce lien m'a aidé à le faire. http://hadoop.apache.org/common/docs/r0.19.0/api/org/apache/hadoop/mapred/lib/MultipleOutputs.html
dans ma classe de pilote que j'avais
MultipleOutputs.addNamedOutput(conf, "even",
org.apache.hadoop.mapred.TextOutputFormat.class, Text.class,
IntWritable.class);
MultipleOutputs.addNamedOutput(conf, "odd",
org.apache.hadoop.mapred.TextOutputFormat.class, Text.class,
IntWritable.class);`
et ma réduire classe est devenu cette
public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {
MultipleOutputs mos = null;
public void configure(JobConf job) {
mos = new MultipleOutputs(job);
}
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
if (sum % 2 == 0) {
mos.getCollector("even", reporter).collect(key, new IntWritable(sum));
}else {
mos.getCollector("odd", reporter).collect(key, new IntWritable(sum));
}
//output.collect(key, new IntWritable(sum));
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
mos.close();
}
}
choses ont fonctionné, mais je reçois beaucoup de fichiers, (un étrange et un même pour chaque carte -reduce)
Question est: Comment puis-je avoir seulement 2 fichiers de sortie (impair & même) de sorte que chaque sortie impaire de chaque carte-réduire soit écrit dans cet impair fichier, et même pour pair. Chaque réducteur utilise un OutputFormat pour écrire des enregistrements dans
Vous utilisez MultipleOutputs pas MultipleOutputFormat. Les deux sont des bibliothèques différentes. –