2.3 Grundlagen von MapReduce

  • Eine Kernkomponente von Hadoop, welche die Logik zum Verarbeiten der Datenmengen über das ganze Cluster hinweg enthält.
  • MapReduce ist ein Software-Framework, welches das Entwickeln von Anwendungen unterstützt und mittels verteilten und parallelen Ausführungen von Algorithmen die Verarbeitung großer Datenmengen ermöglicht.
  • MapReduce besteht aus 2 Funktionen: Map() und Reduce().
  • Map() enthält Funktionen wie das Filtern, das Gruppieren oder das Sortieren. Dazu werden die Daten in verschiedene Gruppen gemappt.
  • Reduce() enthält das Zusammenfassen von Ergebnissen, welche die Map-Funktion liefert.
  • Außerdem enthält das Framework Anweisungen im Fehlerfall, um den Vorgang trotzdem zu Ende bringen zu können.
  • Ein ApplicationMaster überwacht alle Map- und Reducevorgänge auf jeder Partition.

Ein Beispiel: MapReduce-Vorgang in unseren MovieLens-Daten 

In unseren Daten liegen 100.000 Datensätze mit den Ratings von 1 bis 5 vor, beispielhaft ein Auszug der Daten:

useridmovieidratingtimestamp
1962423881250949
1863023891717742
1963771878887116
244512880606923
1663461886397596
1864744884182806
1862652881171488

Der Map-Vorgang sortiert zuerst alle Vorgänge nach ID des Nutzers, welche bewertet wurde; Rating und Timestamp werden nicht beachtet:

196:242186:302196:377244:51166:346186:474186:265

User 196 hat hier Film 242 gesehen, User 186 hat Film 302 gesehen und so weiter…

Wir haben nun Schlüssel-Wert-Paare, die durch MapReduce anschließend sortiert und gruppiert (mittels SHUFFLE AND SORT) werden:

166:346186:302,274,265196:242,377244:51

Der Reduce-Vorgang reduziert dies nun auf die Anzahl der Einträge je nach gegebenem Befehl (hier: len(movies)):

166:1186:3196:2244:1

Dieser Vorgang geschieht vollautomatisch, man muss dazu keine weitere Zeile Code schreiben.

Wie funktioniert der Vorgang genau?

  1. Der MapReduce-Job wird auf einem ClientNode gestartet.
  2. Der Job wird an den YARN Resource Manager weitergeleitet. Yarn hat alle Ressourcen aller Clusterknoten in der Übersicht und weißt den Job einem Knoten zu, der frei ist bzw. welcher die kleinste Warteschlange hat.
  3. Gleichzeitig werden alle notwendigen Daten über HDFS angefragt, also wo sich welche Daten befinden, damit diese zur Verarbeitung zur Verfügung stehen.
  4. Yarn leitet die Anfrage an einen freien NodeManager, welcher als Application Master fungiert. Dieser leitet die Anfrage an einen freien NodeManager-Node zu, um die Aufträge abzuarbeiten. Dazu nimmt sich dieser alle notwendigen Daten vom HDFS. Der Application Master übernimmt dabei das Monitoring des Prozesses.
  5. Die Map()- und Reduce()-Aufgaben können auch an mehrere Clusterknoten verteilt werden.

Fehlerbehandlung bei MapReduce

  • Der Application Master bemerkt, dass ein Worker Node seine Aufgabe nicht beendet hat oder mit einem Fehler beendet hat. Lösung: Die Aufgabe wird erneut gestartet, eventuell wird der Worker Node gewechselt zur Ausführung der Aufgabe.
  • Der ApplicationMaster fällt aus. Lösung: YARN versucht, den ApplicationMaster neu zu starten.
  • Ein NodeManager fällt aus. Lösung: YARN versucht, den NodeManager neu zu starten.
  • Der ResourceManager fällt aus. Lösung: Durch die Einrichtung von „High Availability“ kann Zookeeper dann automatisch anweisen, den Ersatz-ResourceManager zu starten. Ansonsten wird YARN nur den Neustart des ResourceManagers durchführen.

Was spricht gegen MapReduce?

  • nicht jedes Problem lässt sich mit MapReduce lösen
  • andere Frameworks wie Spark oder Hive bieten einen umfangreicheren Funktionsumfang mit teilweise erheblich besseren Verarbeitungszeiten

Weiter geht es mit: 2.4 Einen MapReduce-Job in Hadoop ausführen