Hadoop MapReduce Join & Zähler mit Beispiel

Inhaltsverzeichnis:

Anonim

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.

Arten von Joins in Hadoop MapReduce

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

Datei 1
Datei 2

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

    1. 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.
    2. 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.