MapReduce war ein Modell, das von Google eingeführt wurde, um eine Klasse von Big-Data-Problemen mit großen Clustern kostengünstiger Maschinen zu lösen. Hadoop nimmt dieses Modell in den Kern seines Arbeitsprozesses auf. Dieser Artikel gibt einen einführenden Überblick über das MapReduce-Modell, das von Hadoop zur Lösung des Big-Data-Problems verwendet wird.
Übersicht
Eine typische Big-Data-Anwendung befasst sich mit einer großen Menge skalierbarer Daten. Die Verwendung einer einzigen Datenbank zum Speichern und Abrufen kann ein großer Verarbeitungsengpass sein. Dies gilt insbesondere, wenn wir eine monolithische Datenbank verwenden, um eine große Datenmenge zu speichern, wie wir es bei relationalen Datenbanken und ihrer Verwendung als einzelnes Repository sehen können. Das wird nicht funktionieren, insbesondere müssen wir mit großen Datensätzen in einer verteilten Umgebung umgehen.
Google hat den MapReduce-Algorithmus verwendet, um die Situation anzugehen, und eine Lösung gefunden. Die Idee ist, die größere Aufgabe in kleinere, überschaubare Teile zu unterteilen und sie zur Verarbeitung auf Computer im Netzwerk zu verteilen. Das so erhaltene Ergebnis wird integriert, um den endgültigen Datensatz zu bilden. Diese Idee wurde zur Grundlage des Hadoop-Projekts von Doug Cutting. Hadoop verwendet diesen Algorithmus, um Daten parallel zu anderen zu verarbeiten, um eine vollständige statistische Analyse großer Datenmengen zu liefern. Daher kann Hadoop grob in zwei Teile geteilt werden:
- Verarbeitung: Wird vom MapReduce-Algorithmus genutzt
- Speicherung: Von HDFS genutzt
Hadoop MapReduce ist somit eine Implementierung des Algorithmus, der vom Apache Hadoop-Projekt entwickelt und gepflegt wird. Es funktioniert wie eine Maschine an sich, bei der wir Eingaben bereitstellen und die Engine reagiert, indem sie Eingaben schnell und effizient in Ausgabe umwandelt und in mehreren Stufen verarbeitet. Diese offenkundig vereinfachte Idee muss im weiteren Verlauf ein wenig näher erläutert werden.
MapReduce
MapReduce ist ein paralleles Programmiermodell, das für die schnelle Datenverarbeitung in einer verteilten Anwendungsumgebung verwendet wird. Es funktioniert mit Datensätzen (mehrere Terabyte an Daten), die über Cluster (Tausende von Knoten) im Commodity-Hardware-Netzwerk verteilt sind. MapReduce-Programme laufen auf Hadoop und können in mehreren Sprachen geschrieben werden – Java, C++, Python und Ruby. Das Hauptmerkmal des MapReduce-Programms ist, dass es den Geist der Parallelität von Natur aus in die Programme aufgenommen hat. Dies macht es ideal für groß angelegte Datenanalysen, die das Modell der Parallelität in ihrer Praxis nutzen können, um Ergebnisse effizienter und schneller aus einer bestehenden Infrastruktur herauszuholen.
Wie es funktioniert
Hadoop MapReduce unterteilt die Aufgaben in mehrere Phasen, jede mit einem signifikanten Satz von Funktionen, um das gewünschte Ergebnis aus Big Data zu extrahieren. Es funktioniert auf Knoten in einem Cluster, der auf einer Sammlung von Commodity-Servern gehostet wird. Der Prozess beginnt mit der Benutzeranfrage, die die MapReduce-Engine ausführt, und endet damit, dass das Ergebnis wieder in HDFS gespeichert wird.
Wir können die Ausführung eines MapReduce-Jobs initiieren, indem wir JobClient.runJob(conf) aufrufen Methode. Dies ist eine praktische Methode, um einen neuen JobClient zu erstellen Beispiel. Dies wiederum ruft submitJob() auf und fragt den Auftragsfortschritt jede Sekunde ab und meldet an die Konsole zurück, wenn es seit der Erstellung des letzten Berichts Änderungen gegeben hat. Dies hat einen Welleneffekt und löst eine Reihe von Operationen hinter den Kulissen aus. Der erste Schritt besteht darin, die Eingabedatei zu finden und zu lesen, die die Rohdaten enthält. Das Dateiformat ist beliebig und muss in ein verarbeitungsfähiges Format umgewandelt werden. Dies ist die Aufgabe für InputFormat und der RecordReader(RR) . Das Eingabeformat verwendet die Funktion namens InputSplit um die Datei in kleinere Teile aufzuteilen. Der RecorReader(RR) wandelt dann die Rohdaten um und stellt sie für die Verarbeitung durch map zur Verfügung .
Zuordnung
Sobald die Zuordnung der Daten akzeptabel ist, wird für jedes Eingabepaar (Schlüssel und Wert) eine eigene Instanz erstellt und die Verarbeitung gestartet. Sobald die Zuordnungsfunktion mit der Ausgabe beginnt, wird sie nicht direkt auf die Festplatte geschrieben; Stattdessen wird es im Speicherpuffer gespeichert, um eine Vorsortierung durchzuführen. Jede Karte verwaltet einen Ringpuffer, in den sie die Ausgabe umleitet. Beim Überschreiten der Schwellenwertgröße wird der verschüttete Inhalt auf die Festplatte zurückgeschrieben. Er unterteilt die Daten weiter in Partitionen, die für den Reduzierer akzeptabel sind, zu dem die Daten als nächstes umgeleitet werden. Alle diese Arbeiten finden jedoch gleichzeitig auf mehreren Knoten im Hadoop-Cluster statt. Nach Abschluss der Zuordnungsaufgaben werden die Zwischenergebnisse in der Partition akkumuliert, und es findet ein Mischen und Sortieren statt, um die Ausgabe zu optimieren, damit sie als Eingabe übernommen werden kann.
Reduzieren und Zusammenführen
Was reduziert wird, ist ebenfalls ein Schlüssel-Wert-Paar und verhält sich ähnlich wie die Karte. Es sammelt die Map-Ausgabe von mehreren Map-Tasks im gesamten Cluster und beginnt mit der Verarbeitung erst, nachdem das Mapping abgeschlossen ist. Es verfügt über eine Reihe von Kopier-Threads, um die von der Karte bereitgestellte Ausgabe zusammenzuführen und auf die Festplatte zu übertragen. Wenn sich Kopien auf der Festplatte ansammeln, übernimmt ein Hintergrund-Thread die Aufgabe, sie zu größeren, sortierten Dateien zusammenzuführen. Es liefert auch die Ausgabe in Form eines Schlüssel-Wert-Paares und muss möglicherweise durch das OutputFormat neu formatiert werden vor der Anwendung in der Lage sein, das Format zu akzeptieren. Das Ausgabeformat Nimmt schließlich das Schlüssel-Wert-Paar und schreibt die verarbeiteten Daten in HDFS zurück. Hier, RecordWriter spielt die Hauptrolle, ähnlich wie RecordReader , außer dass es am Anfang beim Lesen von HDFS mitmacht.
Schlussfolgerung
Dies ist nur die Spitze des Eisbergs. Es gibt viele komplizierte Details und vieles mehr passiert hinter den Kulissen. Kurz gesagt, Hadoop MapReduce bietet die Möglichkeit, Big Data in kleinere, überschaubare Teile zu zerlegen, sie parallel auf einem verteilten Cluster zu verarbeiten und die Daten schließlich für die Nutzung oder zusätzliche Verarbeitung verfügbar zu machen. Hadoop hat sich heute zu einem größeren Ökosystem von Tools und Technologien entwickelt, um zeitgemäße Big-Data-Probleme zu lösen, und entwickelt sich schnell weiter, um seine Funktionen zu verfeinern.