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.

Arten von Joins in Hadoop MapReduce
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. Das Ziel besteht darin, MapReduce Join zu verwenden, um diese Dateien zu kombinieren

MapReduce-Beispiel
1 Datei
MapReduce-Beispiel
2 Datei

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_

MapReduce-Beispiel

Schritt 1) Kopieren Sie die ZIP-Datei an den Speicherort Ihrer Wahl

MapReduce-Beispiel

Schritt 2) Dekomprimieren Sie die Zip-Datei

sudo tar -xvf MapReduceJoin.tar.gz

MapReduce-Beispiel

Schritt 3) Gehen Sie zum Verzeichnis MapReduceJoin/

cd MapReduceJoin/

MapReduce-Beispiel

Schritt 4) Starten Sie Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

MapReduce-Beispiel

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 /

MapReduce-Beispiel

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

MapReduce-Beispiel

MapReduce-Beispiel

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

MapReduce-Beispiel

Die Ergebnisse können auch über eine Weboberfläche eingesehen werden.

MapReduce-Beispiel

Wählen Sie nun aus „Durchsuchen Sie das Dateisystem“ und navigieren Sie bis zu /output_mapreducejoin

MapReduce-Beispiel

Öffnen Teil-r-00000

MapReduce-Beispiel

Ergebnisse werden angezeigt

MapReduce-Beispiel

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

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