Hadoop MapReduce Join & Counter mit Beispiel
Was ist Beitritt zu Mapreduce?
Mapreduce-Beitritt Die Operation wird verwendet, um zwei groรe Datensรคtze zu kombinieren. Dieser Prozess erfordert jedoch das Schreiben von viel Code, um den eigentlichen Verbindungsvorgang durchzufรผhren. Das Verbinden zweier Datensรคtze beginnt mit dem Vergleich der Grรถรe jedes Datensatzes. Wenn ein Datensatz im Vergleich zum anderen Datensatz kleiner ist, wird der kleinere Datensatz an alle Datenknoten im Cluster verteilt.
Sobald ein Join in MapReduce verteilt ist, verwendet entweder Mapper oder Reducer den kleineren Datensatz, um eine Suche nach passenden Datensรคtzen aus dem groรen Datensatz durchzufรผhren und diese Datensรคtze dann zu Ausgabedatensรคtzen zu kombinieren.
Arten von Joins
Abhรคngig vom Ort, an dem der eigentliche Join durchgefรผhrt wird, werden Joins in Hadoop in folgende Kategorien eingeteilt:
1. Kartenseitiger Join โ Wenn der Join vom Mapper durchgefรผhrt wird, wird er als kartenseitiger Join bezeichnet. Bei diesem Typ wird der Join durchgefรผhrt, bevor Daten tatsรคchlich von der Kartenfunktion verbraucht werden. Es ist zwingend erforderlich, dass die Eingabe in jede Karte die Form einer Partition hat und in sortierter Reihenfolge vorliegt. Auรerdem muss die Anzahl der Partitionen gleich sein und nach dem Join-Schlรผssel sortiert sein.
2. Reduce-Side-Join โ Wenn der Join vom Reduzierer durchgefรผhrt wird, wird er als Reduce-Side-Join bezeichnet. Bei dieser Verknรผpfung besteht keine Notwendigkeit, einen Datensatz in strukturierter Form (oder partitioniert) zu haben.
Hier gibt die kartenseitige Verarbeitung den Verbindungsschlรผssel und die entsprechenden Tupel beider Tabellen aus. Als Ergebnis dieser Verarbeitung fallen alle Tupel mit demselben Verbindungsschlรผssel in denselben Reduzierer, der dann die Datensรคtze mit demselben Verbindungsschlรผssel verbindet.
Der Gesamtprozessablauf von Joins in Hadoop ist im folgenden Diagramm dargestellt.

So verbinden Sie zwei DataSets: MapReduce-Beispiel
Es gibt zwei Datensรคtze in zwei verschiedenen Dateien (siehe unten). Die Key Dept_ID ist in beiden Dateien gleich. Das Ziel besteht darin, MapReduce Join zu verwenden, um diese Dateien zu kombinieren


Eingang: Der Eingabedatensatz ist eine TXT-Datei. DeptName.txt & DepStrength.txt
Laden Sie hier Eingabedateien herunter
Stellen Sie sicher, dass Hadoop installiert ist. Bevor Sie mit dem tatsรคchlichen Prozess des MapReduce Join-Beispiels beginnen, รคndern Sie den Benutzer in โhduserโ (ID, die wรคhrend der Hadoop-Konfiguration verwendet wird; Sie kรถnnen zu der Benutzer-ID wechseln, die wรคhrend Ihrer Hadoop-Konfiguration verwendet wird).
su - hduser_
Schritt 1) Kopieren Sie die ZIP-Datei an den Speicherort Ihrer Wahl
Schritt 2) Dekomprimieren Sie die Zip-Datei
sudo tar -xvf MapReduceJoin.tar.gz
Schritt 3) Gehen Sie zum Verzeichnis MapReduceJoin/
cd MapReduceJoin/
Schritt 4) Starten Sie Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Schritt 5) DeptStrength.txt und DeptName.txt sind die Eingabedateien, die fรผr dieses MapReduce Join-Beispielprogramm verwendet werden.
Diese Datei muss mit dem folgenden Befehl nach HDFS kopiert werden:
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Schritt 6) Fรผhren Sie das Programm mit dem folgenden Befehl aus:
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Schritt 7) Nach der Ausfรผhrung wird die Ausgabedatei (mit dem Namen โpart-00000โ) im Verzeichnis /output_mapreducejoin auf HDFS gespeichert
Die Ergebnisse kรถnnen รผber die Befehlszeilenschnittstelle angezeigt werden
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Die Ergebnisse kรถnnen auch รผber eine Weboberflรคche eingesehen werden.
Wรคhlen Sie nun aus โDurchsuchen Sie das Dateisystemโ und navigieren Sie bis zu /output_mapreducejoin
รffne Teil-r-00000
Ergebnisse werden angezeigt
Anmerkungen: Bitte beachten Sie, dass Sie das Ausgabeverzeichnis /output_mapreducejoin lรถschen mรผssen, bevor Sie dieses Programm das nรคchste Mal ausfรผhren
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Alternativ kรถnnen Sie einen anderen Namen fรผr das Ausgabeverzeichnis verwenden.
Was ist Counter in MapReduce?
A Zรคhler in MapReduce ist ein Mechanismus, der zum Sammeln und Auswerten statistischer Informationen รผber MapReduce-Jobs und -Ereignisse verwendet wird. Zรคhler halten die track verschiedene Jobstatistiken in MapReduce, wie die Anzahl der durchgefรผhrten Operationen und deren Fortschritt. Zรคhler werden zur Problemdiagnose in MapReduce verwendet.
Hadoop-Zรคhler รคhneln dem Einfรผgen einer Protokollnachricht in den Code fรผr eine Karte oder Reduzierung. Diese Informationen kรถnnten fรผr die Diagnose eines Problems bei der MapReduce-Auftragsverarbeitung nรผtzlich sein.
Typischerweise werden diese Zรคhler in Hadoop in einem Programm (Map oder Reduce) definiert und wรคhrend der Ausfรผhrung inkrementiert, wenn ein bestimmtes Ereignis oder eine bestimmte Bedingung (spezifisch fรผr diesen Zรคhler) eintritt. Ein sehr gutes Anwendungsbeispiel fรผr Hadoop-Zรคhler ist โฆ track gรผltige und ungรผltige Datensรคtze aus einem Eingabedatensatz.
Arten von MapReduce-Zรคhlern
Grundsรคtzlich gibt es 2 Arten MapReduce Theken
- Integrierte Hadoop-Zรคhler:Es gibt einige integrierte Hadoop-Zรคhler, die pro Job vorhanden sind. Nachfolgend finden Sie integrierte Zรคhlergruppen.
- MapReduce-Aufgabenzรคhler โ Sammelt aufgabenspezifische Informationen (z. B. Anzahl der Eingabedatensรคtze) wรคhrend der Ausfรผhrungszeit.
- Dateisystemzรคhler โ Sammelt Informationen wie die Anzahl der von einer Aufgabe gelesenen oder geschriebenen Bytes
- FileInputFormat-Zรคhler โ Sammelt Informationen รผber eine Anzahl von Bytes, die รผber FileInputFormat gelesen werden
- FileOutputFormat-Zรคhler โ Sammelt Informationen รผber eine Anzahl von Bytes, die รผber FileOutputFormat geschrieben werden
- Jobschalter โ Diese Zรคhler werden von Job verwendetTracZu den von ihnen erhobenen Statistiken gehรถren beispielsweise die Anzahl der fรผr einen Auftrag gestarteten Aufgaben.
- Benutzerdefinierte Zรคhler
Zusรคtzlich zu den integrierten Zรคhlern kann ein Benutzer seine eigenen Zรคhler mithilfe รคhnlicher Funktionen definieren, die von bereitgestellt werden Programmiersprachen. Zum Beispiel in Java โenumโ wird verwendet, um benutzerdefinierte Zรคhler zu definieren.
Beispiel fรผr Zรคhler
Eine Beispiel-MapClass mit Zรคhlern zum Zรคhlen der Anzahl fehlender und ungรผltiger Werte. In diesem Tutorial verwendete Eingabedatendatei. Unser Eingabedatensatz ist eine CSV-Datei. SalesJan2009.csv
public static class MapClass
extends MapReduceBase
implements Mapper<LongWritable, Text, Text, Text>
{
static enum SalesCounters { MISSING, INVALID };
public void map ( LongWritable key, Text value,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException
{
//Input string is split using ',' and stored in 'fields' array
String fields[] = value.toString().split(",", -20);
//Value at 4th index is country. It is stored in 'country' variable
String country = fields[4];
//Value at 8th index is sales data. It is stored in 'sales' variable
String sales = fields[8];
if (country.length() == 0) {
reporter.incrCounter(SalesCounters.MISSING, 1);
} else if (sales.startsWith("\"")) {
reporter.incrCounter(SalesCounters.INVALID, 1);
} else {
output.collect(new Text(country), new Text(sales + ",1"));
}
}
}
Der obige Codeausschnitt zeigt eine Beispielimplementierung von Zรคhlern in Hadoop Map Reduce.
Dabei steht: Verkaufstheken ist ein Zรคhler, der mit definiert wird 'enum'. Es wird zum Zรคhlen verwendet FEHLT und UNGรLTIG Eingabedatensรคtze.
Im Codeausschnitt, wenn 'Land' Wenn das Feld die Lรคnge Null hat, fehlt sein Wert und daher der entsprechende Zรคhler SalesCounters.MISSING wird inkrementiert.
Als nรคchstes, wenn 'Verkรคufe' Feld beginnt mit a " dann gilt der Datensatz als UNGรLTIG. Dies wird durch einen inkrementierenden Zรคhler angezeigt SalesCounters.INVALID.











