Benutzer-Werkzeuge

Webseiten-Werkzeuge


bigdata:mapreduce

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bigdata:mapreduce [2015/09/23 12:07] – [Beispiel] brueckbigdata:mapreduce [2015/10/05 20:40] (aktuell) – [Beispiel] brueck
Zeile 7: Zeile 7:
 Die Idee hinter MapReduce ist, eine riesige Datenmenge auf viele Server in einem Cluster aufzuteilen. Da diese einzelnen Rechner nicht nur über eigenen Speicher für die Datenhaltung, sondern auch einen Prozessor für die Datenverarbeitung verfügen, ist es möglich, jeden Rechner parallel Aufgaben auf seinem Teil der Daten ausführen zu lassen, anstatt alles auf einer einzigen Maschine zentralisiert zu berechnen. Die Teilergebnisse werden zum Schluss zu einem Gesamtergebnis zusammengeführt. Dabei besteht ein Cluster, auf dem MapReduce ausgeführt wird, aus einem Master-Knoten, der die Arbeiter koordiniert, über ihren Status Buch führt und bei etwaigen Knotenausfällen Arbeit umverteilt, und einer Reihe von Arbeiter-Knoten, auf denen dann die Map- und Reduce-Funktionen zum Einsatz kommen. Die Idee hinter MapReduce ist, eine riesige Datenmenge auf viele Server in einem Cluster aufzuteilen. Da diese einzelnen Rechner nicht nur über eigenen Speicher für die Datenhaltung, sondern auch einen Prozessor für die Datenverarbeitung verfügen, ist es möglich, jeden Rechner parallel Aufgaben auf seinem Teil der Daten ausführen zu lassen, anstatt alles auf einer einzigen Maschine zentralisiert zu berechnen. Die Teilergebnisse werden zum Schluss zu einem Gesamtergebnis zusammengeführt. Dabei besteht ein Cluster, auf dem MapReduce ausgeführt wird, aus einem Master-Knoten, der die Arbeiter koordiniert, über ihren Status Buch führt und bei etwaigen Knotenausfällen Arbeit umverteilt, und einer Reihe von Arbeiter-Knoten, auf denen dann die Map- und Reduce-Funktionen zum Einsatz kommen.
  
-Die Komplexität der Parallelisierung, Kommunikation zwischen den Maschinen oder dem Vorgehen bei Hardwareausfällen bleibt dem Programmierer dabei verborgen. Ein MapReduce-Job besteht aus zwei Phasen, die von Map- und Reduce-Funktionen anderer Sprachen wie LISP inspiriert wurden. ([[bigdata:literatur|Dean/Ghemwat 2004: S. 1]]) Beide Phasen kommen dabei nacheinander in einem Cluster parallel zur Ausführung. Der Vorteil bei der Verteilung auf einem Cluster ist, dass auf diese Weise auch Datenmengen verarbeitet werden können, die eine einzelne Maschine überfordern würden. Je mehr Maschinen hinzugefügt werden, desto effizienter kann die Last verteilt werden.+Die Komplexität der Parallelisierung, Kommunikation zwischen den Maschinen oder dem Vorgehen bei Hardwareausfällen bleibt dem Programmierer dabei verborgen. Ein MapReduce-Job besteht aus zwei Phasen, die von Map- und Reduce-Funktionen anderer Sprachen wie LISP inspiriert wurden. ([[bigdata:literatur#d|Dean/Ghemwat 2004: S. 1]]) Beide Phasen kommen dabei nacheinander in einem Cluster parallel zur Ausführung. Der Vorteil bei der Verteilung auf einem Cluster ist, dass auf diese Weise auch Datenmengen verarbeitet werden können, die eine einzelne Maschine überfordern würden. Je mehr Maschinen hinzugefügt werden, desto effizienter kann die Last verteilt werden.
  
-Das MapReduce-Framework sorgt dafür, dass jeder der Map-Aufträge auf einem Knoten arbeitet, der nur seine Daten speichert, dass er also unabhängig von den anderen arbeiten kann. Auf die Weise kommt es zu keinen Dead Locks oder Race Conditions, da keine Ressourcen geteilt werden müssen ([[bigdata:literatur|Edlich et al. 2010: S. 13]]). Der Anwender muss also nur die beiden Map- und Reduce-Funktionen schreiben.+Das MapReduce-Framework sorgt dafür, dass jeder der Map-Aufträge auf einem Knoten arbeitet, der nur seine Daten speichert, dass er also unabhängig von den anderen arbeiten kann. Auf die Weise kommt es zu keinen Dead Locks oder Race Conditions, da keine Ressourcen geteilt werden müssen ([[bigdata:literatur#e|Edlich et al. 2010: S. 13]]). Der Anwender muss also nur die beiden Map- und Reduce-Funktionen schreiben.
  
  
Zeile 16: Zeile 16:
 Im ersten Schritt eines MapReduce-Jobs werden die Input-Daten in Segmente unterteilt, die auf verschiedene Maschinen verteilt werden. Jede dieser Maschinen verarbeitet ihr Datensegment zu Key-Value-Paaren, die sie dann an die vom Programmierer geschriebene **Map**-Funktion als Input übergeben. Aufgabe der Map-Funktion ist es, eine Liste von Zwischen-Aggregaten (wiederum Key-Value-Paare) zu erstellen, die im Hauptspeicher der jeweiligen Maschine zwischengespeichert, und regelmäßig auf Festplatte persistiert werden. Ist der Map-Prozess abgeschlossen, benachrichtigt der Arbeiter-Knoten den Master-Knoten und übermittelt ihm die Speicherstelle (auf Disk), damit er sie an den Reducer leiten kann. Im ersten Schritt eines MapReduce-Jobs werden die Input-Daten in Segmente unterteilt, die auf verschiedene Maschinen verteilt werden. Jede dieser Maschinen verarbeitet ihr Datensegment zu Key-Value-Paaren, die sie dann an die vom Programmierer geschriebene **Map**-Funktion als Input übergeben. Aufgabe der Map-Funktion ist es, eine Liste von Zwischen-Aggregaten (wiederum Key-Value-Paare) zu erstellen, die im Hauptspeicher der jeweiligen Maschine zwischengespeichert, und regelmäßig auf Festplatte persistiert werden. Ist der Map-Prozess abgeschlossen, benachrichtigt der Arbeiter-Knoten den Master-Knoten und übermittelt ihm die Speicherstelle (auf Disk), damit er sie an den Reducer leiten kann.
  
-Um möglichst wenige Daten über das Netzwerk senden zu müssen, kann die Ergebnismenge einer Map-Funktion mit einer optionalen **Combiner**-Funktion reduziert werden. Sie nutzt dabei den im Hauptspeicher befindlichen Mapper-Output als Input (noch bevor dieser als Zwischenergebnis auf Disk gespeichert wird) und rechnet alle Werte desselben Schlüssels zusammen, sodass zu jedem Schlüssel nur noch ein Wert existiert. Der Unterschied zur Reduce-Funktion ist nur der, dass der Combiner-Output als Zwischenergebnis gespeichert wird, der dann an den Reducer gesendet wird, wohingegen der Reducer-Output als Datei im Dateisystem abgelegt wird. (Vgl. [[bigdata:literatur|Dean/Ghemwat 2004: S. 6]]) Der Combiner wird manchmal auch als „lokaler Reducer“ oder „mini Reducer“ bezeichnet.+Um möglichst wenige Daten über das Netzwerk senden zu müssen, kann die Ergebnismenge einer Map-Funktion mit einer optionalen **Combiner**-Funktion reduziert werden. Sie nutzt dabei den im Hauptspeicher befindlichen Mapper-Output als Input (noch bevor dieser als Zwischenergebnis auf Disk gespeichert wird) und rechnet alle Werte desselben Schlüssels zusammen, sodass zu jedem Schlüssel nur noch ein Wert existiert. Der Unterschied zur Reduce-Funktion ist nur der, dass der Combiner-Output als Zwischenergebnis gespeichert wird, der dann an den Reducer gesendet wird, wohingegen der Reducer-Output als Datei im Dateisystem abgelegt wird. (Vgl. [[bigdata:literatur#d|Dean/Ghemwat 2004: S. 6]]) Der Combiner wird manchmal auch als „lokaler Reducer“ oder „mini Reducer“ bezeichnet.
  
 Im sogenannten „**Shuffling**“ werden die Ergebnisdaten der Mapper von den Reducer eingelesen und anschließend nach ihrem Schlüssel sortiert und gruppiert. Der **Reduce**-Funktion werden dann nacheinander ein Schlüssel mit dem Satz seiner zugehörigen Werte zur Verarbeitung übergeben. Die Ausgabe wird dann an ein finales Output-File angehängt. Im sogenannten „**Shuffling**“ werden die Ergebnisdaten der Mapper von den Reducer eingelesen und anschließend nach ihrem Schlüssel sortiert und gruppiert. Der **Reduce**-Funktion werden dann nacheinander ein Schlüssel mit dem Satz seiner zugehörigen Werte zur Verarbeitung übergeben. Die Ausgabe wird dann an ein finales Output-File angehängt.
Zeile 27: Zeile 27:
  
 {{ :bigdata:mapreducewordcountoverview1.png?700 |}} {{ :bigdata:mapreducewordcountoverview1.png?700 |}}
-(Bild-Quelle: [[bigdata:literatur|Groningen 2009]])+(Bild-Quelle: [[bigdata:literatur#g|Groningen 2009]])
  
 MapReduce eignet sich also für Probleme, die sich in Unteraufgaben teilen lassen, die durch die Map-Funktion individuell und unabhängig voneinander bearbeitet werden können. Die Ergebnisse der Unteraufgaben müssen sich wiederum unabhängig durch die Reduce-Funktionen zusammentragen lassen. Nur so lassen sich die Aufgaben auf ein großes Rechner-Cluster verteilen und effizient massiv parallel verarbeiten. MapReduce eignet sich also für Probleme, die sich in Unteraufgaben teilen lassen, die durch die Map-Funktion individuell und unabhängig voneinander bearbeitet werden können. Die Ergebnisse der Unteraufgaben müssen sich wiederum unabhängig durch die Reduce-Funktionen zusammentragen lassen. Nur so lassen sich die Aufgaben auf ein großes Rechner-Cluster verteilen und effizient massiv parallel verarbeiten.
bigdata/mapreduce.txt · Zuletzt geändert: 2015/10/05 20:40 von brueck