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
Öffnen 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 zum Sammeln und Messen statistischer Informationen über MapReduce-Jobs und -Ereignisse. Zähler verfolgen verschiedene Jobstatistiken in MapReduce, wie beispielsweise die Anzahl der ausgeführten Operationen und den Fortschritt der Operation. 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.
Normalerweise werden diese Zähler in Hadoop in einem Programm definiert (zuordnen oder reduzieren) und während der Ausführung erhöht, 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 2 Arten MapReduce Zähler
- 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 JobTracker verwendet. Zu den von ihnen gesammelten Statistiken gehört beispielsweise die Anzahl der für einen Job 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.
Hier 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.