Mapper schreiben
In diesem Schritt werden Sie die Mapper-Klasse schreiben, um die Eingabedaten zu verarbeiten und Zwischenschlüssel-Wert-Paare auszugeben.
Öffnen Sie das Terminal und folgen Sie den untenstehenden Schritten, um loszulegen.
Wechseln Sie zum Benutzer hadoop
und wechseln Sie dann in das Home-Verzeichnis des Benutzers hadoop
:
su - hadoop
Erstellen Sie eine Java-Datei für die Mapper-Klasse:
nano /home/hadoop/SpaceBattleMapper.java
Fügen Sie dann den folgenden Code in die Datei SpaceBattleMapper.java
ein:
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Mapper.Context;
import java.io.IOException;
public class SpaceBattleMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// Teilen Sie die Eingabezeile in Wörter auf
String[] words = value.toString().split("\\s+");
// Geben Sie für jedes Wort ein Schlüssel-Wert-Paar aus
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
Tipps: Sie können den Code aus der Eingabemaske rechts kopieren und ihn mit Strg + Umschalt + V
in den geöffneten nano-Editor einfügen. Drücken Sie Strg + O
, um die Datei zu speichern, und Enter
, um zu bestätigen, wenn der nano-Editor Sie dazu auffordert. Schließen Sie den Editor schließlich mit Strg + X
.
Die Klasse SpaceBattleMapper
erweitert die Klasse Mapper
des Hadoop-Frameworks. Sie wird verwendet, um Eingabedaten im Format Schlüssel-Wert-Paar zu verarbeiten, wobei der Schlüssel ein LongWritable
ist, das den Byteoffset der Zeile in der Eingabedatei darstellt, und der Wert ein Text
-Objekt, das die Textzeile darstellt.
Die Klasse definiert zwei private Felder:
one
: Ein IntWritable
-Objekt mit einem konstanten Wert von 1. Dies wird als Wert in den ausgegebenen Schlüssel-Wert-Paaren verwendet.
word
: Ein Text
-Objekt, das verwendet wird, um jedes Wort aus der Eingabezeile zu speichern.
Die map
-Methode wird überschrieben, um die spezifische Zuordnungslogik bereitzustellen:
- Der Eingabe-
Text
-Wert wird in einen String umgewandelt und in Wörter aufgeteilt, basierend auf Leerzeichen.
- Für jedes Wort im Array wird das
word
-Objekt auf das Wort gesetzt, und ein Schlüssel-Wert-Paar wird mit dem Wort als Schlüssel und one
als Wert ausgegeben. Dies wird mit der context.write
-Methode durchgeführt.
Diese Mapper-Klasse ist so konzipiert, dass für jedes Wort in den Eingabedaten ein Schlüssel-Wert-Paar ausgegeben wird, mit dem Wort als Schlüssel und der ganzen Zahl 1 als Wert. Diese Einrichtung wird häufig in Wörterzählungsanwendungen verwendet, bei denen das Ziel darin besteht, die Vorkommen jedes Worts in einem Datensatz zu zählen.