Das MapReduceProgrammiermodell Seminar zu Datenbanksystemen „Webdatenbanken: SQL oder NoSQL“ Oliver Pabst - 14.06.2012 Übersicht 1. Ausgangsproblem 2. MapReduce ‣ ‣ Programmiermodell (Theorie) Ausführung (Praxis) 3. Kritik 4. Fazit Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 1 Ausgangsproblem • • Große Datenmengen (>400 TB) Rechner liest Daten mit ~30 MB/s • • 1 Rechner: ~1 Tag für 2.6 TB Verarbeitung der gelesenen Daten benötigt noch mehr Zeit Parallelisierung Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 2 Folgen für die Entwicklung • • • Kommunikation und Koordination Fehlertoleranz bei Hardwareausfällen Fehlersuche Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 3 Was ist MapReduce? 1. Programmiermodell, das für viele umfangreiche Berechnungsprobleme geeignet ist und 2. Laufzeitsystem, welches „schmutzige Details“ vor dem Anwender versteckt • Ermöglicht Verarbeitung und Erzeugung großer Datensätze auf verteilten Systemen Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 4 Programmiermodell • Inspiriert durch die Funktionen Map und Reduce aus der funktionalen Programmierung • Map: Anwendung einer Funktion auf Liste von Werten • Reduce: Zusammenfassung einer Liste von Werten durch eine Funktion Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 5 Laufzeitsystem • • • Automatische Parallelisierung • Behandlung von Hardwarefehlern Versteckt die Eingabedatenpartitionierung Koordiniert Programmausführung auf dem verteilten System (Kommunikation) Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 6 Typischer Ablauf 1. Daten einlesen 2. Map: Relevantes aus jedem Datensatz extrahieren 3. Mischen und Sortieren 4. Reduce: Zusammenfassen, Aggregieren, Filtern, Transformieren 5. Ergebnisse schreiben Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 7 Map (Scheme) • • Anwendung einer Funktion auf Liste von Werten • map(square, (1, 2, 3, 4, 5)) = (1, 4, 9, 16, 25)) Beispiel: (define (square x) (* x x)) Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 8 Reduce (Scheme) • • • reduziert Liste durch „Faltung“ auf einzelnen Wert • Beispiel: foldr(+, 0, (1, 2, 3, 4, 5)) = 0 + 5 + 4 + 3 + 2 + 1 links- oder rechtsassoziativ Beispiel: foldl(+, 0, (1, 2, 3, 4, 5)) = 0 + 1 + 2 + 3 + 4 + 5 Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 9 Die Map-Funktion set of values. Typically just zero or one output value is produced per Reduce invocation. The intermediate values are supplied to the user’s reduce function via an iterator. This allows us to handle lists of values that are too large to fit in memory. 2.1 Example • • • Erhält als Eingabe ein Key-Value Paar Erzeugt Menge von Key-Value Paaren hier: <”Wort”, ”1”> Oliver Pabst - 14.06.12 Consider the problem of counting the number of occurrences of each word in a large collection of documents. The user would write code similar to the following pseudo-code: map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result)); The map function emits each word plus an associated count of occurrences (just ‘1’ in this simple example). The reduce function sums together all counts Das MapReduce-Programmiermodell Seite: 10emitted for a particular word. Die Reduce-Funktion large to fit in memory. tio 2.1 Example Di ma ide ate Consider the problem of counting the number of occurrences of each word in a large collection of documents. The user would write code similar to the following pseudo-code: map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); • Aggregiert Werte gleicher Schlüssel • hier: <”Wort”, ”1”, ”1”> wird zu <”Wort”, ”2”> Oliver Pabst - 14.06.12 reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result)); The map function emits each word plus an associated count of occurrences (just ‘1’ in this simple example). The reduce function sums together all counts emitted for a particular word. In addition, the user writes code to fill in a mapreduce specification object with the names of the input and output files, and optional tuning parameters. The user then invokes the MapReduce function, passing it the specification object. The user’s code is linked together with the MapReduce library (implemented in C++). Appendix A Das MapReduce-Programmiermodell contains the full program text for this example.Seite: 11 Co tio "U for pa Re "t UR fun so "t Te mo of ma pa ex du for thr "h Beispiel • • Gegeben ist eine Menge von Worten • „Sein oder nicht sein“ Aufgabe: Zähle die Vorkommen der Worte in der gegebenen Wortmenge Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 12 Ausgabe der Map-Funktion Key: sein Value: 1 Oliver Pabst - 14.06.12 Key: oder Value: 1 Key: nicht Value: 1 Das MapReduce-Programmiermodell Key: sein Value: 1 Seite: 13 Ausgabe der Reduce-Funktion Key: "sein" Value: "1", "1" "2" Key: "oder" Value: "1" "1" Key: "nicht" Value: "1" "1" "sein", "2" "oder", "1" "nicht", "1" Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 14 Partitionierung • • • Aufteilung der Eingabe-Daten in M Teile Aufteilung der Ausgabe-Daten in R Partitionen Daten werden auf die Partitionen verteilt, indem die Ergebnispaare der Map-Funktion nach dem Hash des Schlüssels verteilt werden ‣ hash(key) mod R Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 15 Weitere Beispiel • Verteiltes „Grep“ ‣ • Gibt Zeile aus, wenn Pattern gefunden wurde URL-Zugriffszahlen ‣ ‣ ‣ Verarbeitet Logs von Webseitenanfragen Map-Funktion liefert Paare der Form <URL, 1> Reduce-Funktion addiert alle Werte gleicher Schlüssel auf (<URL, Gesamtzahl>) Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 16 Einschränkungen • Teilergebnisse müssen voneinander unabhängig sein • z.B. Fibonacci-Zahlen nicht mittels MapReduce berechenbar Fn = Fn Oliver Pabst - 14.06.12 1 + Fn Das MapReduce-Programmiermodell 2 Seite: 17 MapReduce-Ablauf EingabeDaten Oliver Pabst - 14.06.12 Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master Worker Worker Worker Worker Teil 1 Teil 2 Teil 3 EingabeDaten Oliver Pabst - 14.06.12 Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master (2) map zuweisen (2) reduce zuweisen Worker Worker Worker Worker Teil 1 Teil 2 Teil 3 EingabeDaten Oliver Pabst - 14.06.12 Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master (2) map zuweisen (3) lesen (2) reduce zuweisen Worker Worker Worker Worker Teil 1 Teil 2 Teil 3 EingabeDaten Oliver Pabst - 14.06.12 Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master (2) map zuweisen (3) lesen (2) reduce zuweisen Worker Worker (4) lokal schreiben Teil 1 Teil 2 Teil 3 Worker EingabeDaten Oliver Pabst - 14.06.12 Worker Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master (2) map zuweisen (3) lesen (2) reduce zuweisen Worker Worker (4) lokal schreiben Teil 1 Teil 2 Teil 3 (5) entfernt lesen Worker EingabeDaten Oliver Pabst - 14.06.12 Worker Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 MapReduce-Ablauf Programm (1) fork (1) fork (1) fork Master (2) map zuweisen (3) lesen (2) reduce zuweisen Worker Worker (4) lokal schreiben Teil 1 Teil 2 Teil 3 Oliver Pabst - 14.06.12 Ausgabe 1 (5) entfernt lesen Ausgabe 2 Worker EingabeDaten (6) schreiben Worker Map-Phase temporäre Daten Reduce-Phase Das MapReduce-Programmiermodell AusgabeDaten Seite: 18 Umgang mit Hardwarefehlern • Worker-Fehler • • • Master pingt Worker periodisch an Wenn keine Antwort erfolgt, werden fertige MapTasks sowie in Bearbeitung befindliche Map- und Reduce-Tasks des Workers zurückgesetzt und für Neuberechnung markiert Master-Fehler • • Daten des Masters werden periodisch gesichert Fortsetzung von Checkpoint möglich Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 19 Kritik an MapReduce • • Anfangs großer Hype um MapReduce • hohe Skalierbarkeit degradiert klassische DBMS zu „Dinosauriern“ • Veröffentlichung von Stonebreaker et al. Revolutionäre neue Plattform für massiv parallelen Datenzugriff im großen Umfang • Vergleich von Hadoop, Vertica und DBMS-X Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 20 Programmiermodell • Vorteil deklarativer Sprachen: „Stating what you want - rather than presenting an algorithm for how to get it“ [2] • Manche Aufgaben in SQL beispielsweise nur schwer formulierbar • Überlappende Satellitenbilder zusammenheften und Ränder anpassen • Straßensegmente verarbeiten und aus diesen Kacheln zur Darstellung der Segmente in einem Kartendienst rendern Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 21 Daten lesen • Aufgabe: Einlesen von 1TB Daten in das verteilte System • Hadoop: Daten werden lokal in das HDFS (Hadoop Distributed File System) eingelesen • DBMS: Daten getrennt durch Trennzeichen; paralleles Einlesen der lokalen Daten auf jeden Knoten Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 22 Daten einlesen (Ergebnisse) 30000 50000 25000 40000 seconds 15000 Grafik: 20000 et.al [2] Stonebreaker ← 67.7 ← 75.5 10000 50 Nodes 100 Nodes Hadoop 25 Nodes 50 Nodes Vertica 100 Nodes 0 1 Nodes 10 N Hadoop Figure 2: Load Times – Grep Task Data Set Hadoop skaliert(1TB/cluster) linear beim Einlesen p Task Data Set • 10000 5000 0 30000 ← 2262.2 seconds 20000 Figure 3: Load T (20GB ferent node based on the hash of its pr of 3TB of disk space in order to store Oliver Pabst 14.06.12limited to Das MapReduce-Programmiermodell Seite: 23 loaded, the columns are automatically n HDFS, we - were running SELECT • Aufgabe: Abfrage von URLs und ihrem PageRank mit PageRank > X • DBMS: SELECT pageURL, pageRank FROM Rankings WHERE pageRank > X; • Hadoop: Eingabe durch Trennzeichen getrennt, ein neues Paar wird von der Map-Funktion erzeugt, wenn pageRank > X Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 24 SELECT 160 • ← 12.4 ← 4.7 ← 1.8 ← 0.8 ← 0.3 seconds factor across all clu formance of all syst 140 the total amount of 120 example, there is a between the 1 node 100 to Hadoop’s increas the cluster, which ta 80 Grafik:time for short query 60 Stonebreaker et.al [2] Another importan to outperform Hado 40 dex on the pageRan 20 sorted by pageRank also be noted that al 0 1 Nodes 10 Nodes 25 Nodes 50 Nodes 100 Nodes relative performanc This is in spite of th Vertica Hadoop the same amount of ish executing the que Figure 6: Selection Task Results control messages fr time for the system t tom input handlers in Hadoop; the MR programs are able to use for query dissemina Hadoop’s KeyValueTextInputFormat interface on the data we believe has cons files to automatically split lines of text files into key/values pairs by nodes are involved i the tab delimiter. Again, we found that other data format options, Hadoop bedeutend langsamer bei klassischen Aufgaben von Datenbanksystemen such Oliver Pabst - 14.06.12 as SequenceFileInputFormat or custom Writable Das MapReduce-Programmiermodell tuples, resulted in both slower load and execution times. Seite:Aggrega 25 4.3.3 Fazit • MapReduce verkraftet Hardwareausfälle bedeutend besser als klassische Datenbanksysteme • MapReduce ist ein gutes „Extract-Transform-Load“System • MapReduce einfach zu optimieren; DBMS aufwändig zu optimieren, um optimale Leistung zu erreichen • „The right tool for the right job!“ Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 26 Quellen • [1]: Dean, Ghemawat - MapReduce: Simplified Data Processing on Large Clusters • [2]: Pavlo, Stonebreaker et al. - A comparison of Approaches to Large-Scale Data Analysis • [3]: Dean, Ghemawat - MapReduce: A flexible Data Processing Tool • [4]: Pavlo, Stonebreaker et al. - MapReduce an Parallel DBMSs: Friends or Foes? • [5]: Horn, Ilan - Introduction to MapReduce, an Abstraction for Large-Scale Computation Oliver Pabst - 14.06.12 Das MapReduce-Programmiermodell Seite: 27