Was ist Join in Mapreduce?
Die Mapreduce- Verknüpfungsoperation wird verwendet, um zwei große Datensätze zu kombinieren. Bei diesem Prozess wird jedoch viel Code geschrieben, um die eigentliche Verknüpfungsoperation auszuführen. Das Verbinden von zwei Datensätzen beginnt mit dem Vergleichen der Größe jedes Datensatzes. Wenn ein Datensatz im Vergleich zum anderen kleiner ist, wird ein kleinerer Datensatz an jeden Datenknoten im Cluster verteilt.
Sobald ein Join in MapReduce verteilt ist, verwenden entweder Mapper oder Reducer das kleinere Dataset, um nach übereinstimmenden Datensätzen aus dem großen Dataset zu suchen und diese Datensätze dann zu Ausgabedatensätzen zu kombinieren.
In diesem Tutorial lernen Sie:
- Was ist ein Join in MapReduce?
- Arten von Join
- So verbinden Sie zwei DataSets: MapReduce-Beispiel
- Was ist der Zähler in MapReduce?
- Arten von MapReduce-Zählern
- Zähler Beispiel
Arten von Join
Abhängig von dem Ort, an dem der eigentliche Join ausgeführt wird, werden Joins in Hadoop in folgende Kategorien eingeteilt:
1. Map-Side-Join - Wenn der Join vom Mapper ausgeführt wird, wird er als Map-Side-Join bezeichnet. Bei diesem Typ wird der Join ausgeführt, bevor Daten tatsächlich von der Zuordnungsfunktion verbraucht werden. Es ist zwingend erforderlich, dass die Eingabe für jede Karte in Form einer Partition erfolgt und in sortierter Reihenfolge erfolgt. Außerdem muss es eine gleiche Anzahl von Partitionen geben und nach dem Join-Schlüssel sortiert sein.
2. Join auf der Reduktionsseite - Wenn der Join vom Reduzierer ausgeführt wird, wird er als Join auf der Reduktionsseite bezeichnet. Bei diesem Join ist es nicht erforderlich, ein Dataset in strukturierter Form (oder partitioniert) zu haben.
Hier gibt die kartenseitige Verarbeitung den Join-Schlüssel und die entsprechenden Tupel beider Tabellen aus. Infolge dieser Verarbeitung fallen alle Tupel mit demselben Verknüpfungsschlüssel in denselben Reduzierer, der dann die Datensätze mit demselben Verknüpfungsschlüssel verbindet.
Ein Gesamtprozessablauf der Verknüpfungen in Hadoop ist in der folgenden Abbildung 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. Ziel ist es, diese Dateien mit MapReduce Join zu kombinieren


Eingabe: Der Eingabedatensatz ist eine txt-Datei, DeptName.txt & DepStrength.txt
Laden Sie die Eingabedateien von hier herunter
Stellen Sie sicher, dass Sie Hadoop installiert haben. Bevor Sie mit dem tatsächlichen Prozess "MapReduce Join" 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 angezeigt werden
Wählen Sie nun 'Dateisystem durchsuchen ' und navigieren Sie zu / output_mapreducejoin
Öffnen Sie Teil-r-00000
Ergebnisse werden angezeigt
HINWEIS: Bitte beachten Sie, dass Sie das Ausgabeverzeichnis / output_mapreducejoin löschen müssen, bevor Sie dieses Programm zum nächsten 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 der Zähler in MapReduce?
Ein Zähler in MapReduce ist ein Mechanismus zum Sammeln und Messen statistischer Informationen zu MapReduce-Jobs und -Ereignissen. Zähler verfolgen verschiedene Jobstatistiken in MapReduce, z. B. die Anzahl der aufgetretenen Vorgänge und den Fortschritt des Vorgangs. Zähler werden für die Problemdiagnose in MapReduce verwendet.
Hadoop-Zähler ähneln dem Einfügen einer Protokollnachricht in den Code für eine Karte oder dem Reduzieren. Diese Informationen können zur Diagnose eines Problems bei der MapReduce-Jobverarbeitung hilfreich sein.
In der Regel werden diese Zähler in Hadoop in einem Programm definiert (zuordnen oder reduzieren) und während der Ausführung inkrementiert, wenn ein bestimmtes Ereignis oder eine bestimmte Bedingung (spezifisch für diesen Zähler) auftritt. Eine sehr gute Anwendung von Hadoop-Zählern besteht darin, gültige und ungültige Datensätze aus einem Eingabedatensatz zu verfolgen.
Arten von MapReduce-Zählern
Grundsätzlich gibt es zwei Arten von MapReduce-Zählern
- Integrierte Hadoop-Zähler: Es gibt einige integrierte Hadoop-Zähler, die pro Job vorhanden sind. Unten finden Sie integrierte Zählergruppen.
- MapReduce- Taskzähler - Sammelt während der Ausführungszeit aufgabenspezifische Informationen (z. B. Anzahl der Eingabedatensätze).
- Filesystem - Zähler - Sammelt Informationen wie Anzahl der gelesenen Bytes oder von einer Task geschrieben
- FileInputFormat-Zähler - Sammelt Informationen zu einer Anzahl von Bytes, die durch FileInputFormat gelesen werden
- FileOutputFormat-Zähler - Sammelt Informationen zu einer Anzahl von Bytes, die über FileOutputFormat geschrieben wurden
- Jobzähler - Diese Zähler werden von JobTracker verwendet. Zu den von ihnen gesammelten Statistiken gehört z. B. die Anzahl der Aufgaben, die für einen Job gestartet wurden.
- Benutzerdefinierte Zähler
Zusätzlich zu den integrierten Zählern kann ein Benutzer seine eigenen Zähler mit ähnlichen Funktionen definieren, die von Programmiersprachen bereitgestellt werden. In Java werden beispielsweise 'enum' verwendet, um benutzerdefinierte Zähler zu definieren.
Zähler Beispiel
Ein Beispiel für eine MapClass mit Zählern zum Zählen der Anzahl fehlender und ungültiger Werte. In diesem Lernprogramm verwendete Eingabedatendatei Unser Eingabedatensatz ist eine CSV-Datei, SalesJan2009.csv
public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString 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"));}}}
Das obige Code-Snippet zeigt eine Beispielimplementierung von Zählern in Hadoop Map Reduce.
Hier ist SalesCounters ein Zähler, der mit 'enum' definiert wird . Es wird verwendet, um MISSING- und INVALID- Eingabedatensätze zu zählen .
Wenn im Code-Snippet das Feld 'country' die Länge Null hat, fehlt sein Wert und daher wird der entsprechende Zähler SalesCounters.MISSING inkrementiert.
Wenn das Feld 'sales' mit einem " beginnt, wird der Datensatz als UNGÜLTIG betrachtet. Dies wird durch Inkrementieren des Zählers SalesCounters.INVALID angezeigt.