Implementiere den Treiber
In diesem Schritt erstellen wir eine Treiber-Klasse, um die MapReduce-Aufgabe zu konfigurieren und auszuführen.
Erstellen Sie zunächst eine Java-Datei für die Treiber-Klasse:
touch /home/hadoop/WordLengthDriver.java
Fügen Sie dann den folgenden Code zur WordLengthDriver.java
-Datei hinzu:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordLengthDriver {
public static void main(String[] args) throws Exception {
if (args.length!= 2) {
System.err.println("Usage: WordLengthDriver <input> <output>");
System.exit(1);
}
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Word Length");
job.setJarByClass(WordLengthDriver.class);
job.setMapperClass(WordLengthMapper.class);
job.setReducerClass(WordLengthReducer.class);
job.setOutputKeyClass(CompositeKey.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
Im obigen Code erstellen wir eine WordLengthDriver
-Klasse, die als Einstiegspunkt für unsere MapReduce-Aufgabe dient. Die main
-Methode nimmt zwei Befehlszeilenargumente entgegen: den Eingabepfad und den Ausgabepfad für die Aufgabe.
Innerhalb der main
-Methode erstellen wir ein neues Configuration
-Objekt und ein neues Job
-Objekt. Wir konfigurieren die Aufgabe, indem wir die Mapper- und Reducer-Klassen, die Ausgabeschlüssel- und -wertklassen sowie die Eingabe- und Ausgabepfade festlegen.
Schließlich übermitteln wir die Aufgabe und warten auf ihre Fertigstellung. Wenn die Aufgabe erfolgreich abgeschlossen ist, beenden wir mit einem Statuscode von 0; andernfalls beenden wir mit einem Statuscode von 1.
Um die Aufgabe auszuführen, können Sie den folgenden Befehl verwenden:
javac -source 8 -target 8 -classpath "/home/hadoop/:/home/hadoop/hadoop/share/hadoop/common/hadoop-common-3.3.6.jar:/home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.6.jar:/home/hadoop/hadoop/share/hadoop/common/lib/*" -d /home/hadoop /home/hadoop/WordLengthMapper.java /home/hadoop/CompositeKey.java /home/hadoop/WordLengthReducer.java /home/hadoop/WordLengthDriver.java
jar cvf word-length.jar *.class
hadoop jar word-length.jar WordLengthDriver /input /output
Schließlich können wir die Ergebnisse überprüfen, indem wir folgenden Befehl ausführen:
hadoop fs -cat /output/*
Beispielausgabe:
A:3 Amr
A:6 AADzCv
A:10 AlGyQumgIl
...
h:7 hgQUIhA
h:8 hyrjMGbY, hSElGKux
h:10 hmfHJjCkwB
...
z:6 zkpRCN
z:8 zfMHRbtk
z:9 zXyUuLHma