Ich arbeite an einem MapReduce-Projekt mit Hadoop. Ich habe derzeit 3 aufeinanderfolgende Jobs.Verwenden von Hadoop-Zählern - Mehrere Jobs
Ich möchte Hadoop-Zähler verwenden, aber das Problem ist, dass ich die tatsächliche Zählung im ersten Job machen möchte, aber auf den Zählerwert im Reducer des 3. Jobs zugreifen.
Wie kann ich das erreichen? Wo sollte ich die enum
definieren? Muss ich es bestehen, warf den zweiten Job? Es wird auch helfen, ein Codebeispiel dafür zu sehen, da ich noch nichts finden konnte.
Hinweis: Ich bin mit Hadoop 2.7.2
EDIT: Ich habe bereits versucht, den Ansatz here erklärt und es gelang nicht. Mein Fall ist anders, da ich auf die Zähler von einem anderen Job zugreifen möchte. (nicht von Mapper zu Reducer).
Was ich versucht zu tun: First Job:
public static void startFirstJob(String inputPath, String outputPath) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "wordCount");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class);
job.setCombinerClass(WordCountReducer.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
job.setInputFormatClass(SequenceFileInputFormat.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(inputPath));
FileOutputFormat.setOutputPath(job, new Path(outputPath));
job.waitForCompletion(true);
}
Definierte der Zähler Enum in einer anderen Klasse:
public class CountersClass {
public static enum N_COUNTERS {
SOMECOUNT
}
}
Versuch Zähler zu lesen:
Cluster cluster = new Cluster(context.getConfiguration());
Job job = cluster.getJob(JobID.forName("wordCount"));
Counters counters = job.getCounters();
CountersClass.N_COUNTERS mycounter = CountersClass.N_COUNTERS.valueOf("SOMECOUNT");
Counter c1 = counters.findCounter(mycounter);
long N_Count = c1.getValue();
Mögliches Duplikat [? Gibt es eine Möglichkeit Anzahl erfolgreicher Karten Aufgaben zuzugreifen aus einer Verringerung Aufgabe in einem MR-Job] (http://stackoverflow.com/questions/8009802/is-there-a-way-to-access-Nummer-of-Success-Map-Aufgaben-from-a-reduced-task-in-an) – tworec
Ich denke, es ist keine gute Idee, Zähler von innen zu verwenden Job reduzieren. siehe http://stackoverflow.com/questions/8009802/is-there-a-way-to-access-number-of-successful-map-tasks-from-a-reduce-task-in-an/ – tworec
Ja, Ich habe das schon gesehen und diesen Ansatz versucht. Aber in diesem Fall möchte er die Zähler innerhalb des Reduzierers (des gleichen Jobs) bekommen. Es ist nicht dasselbe wie in meinem Fall. –