Desidero sapere se l'output di "istanza" di OutputCollector utilizzato nella funzione mappa: output.collect (chiave, valore) questo -output- sta memorizzando le coppie di valori chiave da qualche parte? anche se emette la funzione di riduzione, il loro deve essere un file intermedio, giusto? Cosa sono quei file? Sono visibili e decisi dal programmatore? Le uscite OutputKeyClass e OutputValueClasses che specifichiamo nella funzione principale in questi luoghi di archiviazione? [Text.class e IntWritable.class]Hadoop: come funziona OutputCollector durante MapReduce?
Im dando il codice standard per l'esempio di conteggio parole in MapReduce, che possiamo trovare in molti punti della rete.
public class WordCount {
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
output.collect(word, one);
}
}
}
public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
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();
}
output.collect(key, new IntWritable(sum));
}
}
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(WordCount.class);
conf.setJobName("wordcount");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
Perché si desidera accedere a questi file temporanei? Hai una cosa particolare che vuoi raggiungere? o è solo la curiosità? – adranale
Voglio cambiare la posizione di questi file temporanei. – catty