2. Map/Reduce Programming Model Architektur von Datenbanksystemen II
Motivation PROBLEMSTELLUNG § Unternehmen wie Google, Yahoo, Facebook und Twitter müssen täglich Datenmengen im Bereich von TB und PB speichern und verarbeiten § Daten sind zu groß, um sie auf einer einzigen Maschine sequentiell zu bearbeiten § Darum: Die Verarbeitung großer Datenmengen geschieht heute häufig mit verteilten Rechnern in Clustern § Es existieren 2 grundlegende Aufgabenbereiche: - Die Daten müssen möglichst effizient gespeichert werden - Die Daten müssen möglichst effizient verarbeitet werden
2
Datenspeicherung und -verarbeitung DATENSPEICHERUNG § zur effizienten Datenspeicherung entwickelte Google das verteilte-Dateisystem Google File System (GFS) - GFS arbeitet nach dem Master-Slave-Prinzip - Fehlertoleranz bei Hardwareausfällen erreicht GFS durch Replikation - http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf
DATENVERARBEITUNG § Das Standardvorgehen bei verteilten Systemen ist üblicherweise: Es findet ein Transfer der zu verarbeitenden Daten zum Programm statt - Ein Programm startet auf einem Rechner und holt die benötigten Eingabedaten von einer Quelle (z.B. FTP-Server oder Datenbank) - Dieses Vorgehen ist bei großen Datenmengen wegen des Datentransfers ein Flaschenhals und somit nicht optimal - Lösung: Die Datenverarbeitung muss dort stattfinden, wo die Daten gespeichert sind à Das ist mit dem Map/Reduce-Programmiermodell möglich
3
p
Zwei Bedeutungen von Map/Reduce Hadoop - Komponenten und Erweiterungen
deutungen von MapReduce MAP/REDUCE-PROGRAMMIERMODELL
§ Fürsind die parallele pReduce h¨aufig Datenverarbeitung 2 Dinge gemeintin Clustern
apReduce-Programmiermodell Fu ¨r die parallele Datenverarbeitung in Clustern
MAP/REDUCE-FRAMEWORK § Arbeiten nach dem Map/ReduceProgrammiermodell § Unterscheiden sich durch die Wahl der Programmiersprache und in den Implementierungsdetails
apReduce-Frameworks (z.B. Hadoop) Arbeiten nach dem MapReduce-Programmiermodell Unterscheiden sich durch die Wahl der Programmiersprache und in den Implementierungsdetails
4
MapReduce-Programmiermodell Ansatz ZIEL § Verstecke Komplexität der parallelen Programmierung, Datenverteilung, Fehlertoleranz vor dem Entwickler
Map
f
f
f
f
f
g
g
g
g
g
MAP/REDUCE-ANSATZ § Das Map/Reduce-Programmiermodell teilt Aufgaben in kleine Teile auf und verteilt sie zur gleichzeitigen Verarbeitung auf unterschiedliche Rechnerknoten auf (Map-Phase) § Das Endergebnis entsteht durch die Zusammenführung der Teilergebnisse (ReducePhase)
Fold
5
Wurzeln und funktionale Progammierung WURZELN
VON
MAP/REDUCE
§ Das Konzept MapReduce hat seine Wurzeln in Lisp § Lisp kennt die beiden Funktionen map() und reduce() § Lisps map-Funktion wird mit einer Liste von Eingabewerten und einer Funktion als Parameter aufgerufen - die übergebene Funktion wird auf jeden Wert der Liste angewendet
§ Lips reduce-Funktion ruft man auch mit einer Funktion und einer Liste mit Eingabewerten auf - Reduce arbeitet ähnlich wie map, führt aber alle Ergebnisse zusammen
MAP/REDUCE BASIERT
AUF DEM
PRINZIP
FUNKTIONALE
PROGRAMMIERUNG § Funktionale Programmierung ist ein Programmierstil, bei dem Programme ausschließlich aus Funktionen bestehen § Funktionale Programme sind eine Menge von (Funktions-)Definitionen § (Funktions-)Definitionen sind partielle Abbildungen von Eingabedaten auf Ausgabedaten § Die Eingabedaten werden nie verändert! § Die Funktionen sind idempotent (frei von Seiteneffekten) - bei jedem identischen Aufruf wird das gleiche Ergebnis zurückgeliefert
§ Es werden ausschließlich Berechnungen mit Eingabedaten durchgeführt und neue Zwischenergebnisse gebildet
6
MapReduce besteht aus 3 Schritten: Map/Reduce Partitionierung der Ausgangsdaten 2 Abbilden (Mappen) der Daten auf eine Datenstruktur, die aus einem MAP/REDUCE BESTEHT AUS 3 SCHRITTEN Schlder u besteht und Kombinieren der Daten ¨ssel-Wert-Paar § Partitionierung Eingabedaten § Abbilden (Mappen) der Daten auf! einelist Datenstruktur, die aus einem Schlüssel-Wert-Paar besteht und Kombinieren der map (k1,v1) (k2,v2) Daten 3 v1) Reduzieren ¨ssel-Wert-Paare zum Ergebnis map(k1, à list(k2, v2) (Reduce) der Schlu § Reduzieren (Reduce) der Schlüssel-Wert-Paare zum Ergebnis reduce (k2,list(v2)) ! list (v2) reduce(k2, list(v2)) à list(v2) 1
Dr. Christian Baun – 11.Vorlesung Cluster-, Grid- und Cloud-Computing – Hochschule Mannheim – WS1112
7
11/80
Beispiel – Map MAP
ERZEUGT ALS
ZWISCHENERGEBNIS
EINE
SAMMLUNG VON (SCHLÜSSEL, WERT )-PAAREN
BEISPIEL: ZÄHLE WÖRTER IN EINEM DOKUMENT
map(dokumentName, wert){ for each word w in wert emit(w, "1"); }
§
Textinhalt des Dokuments
§
Emittiert für jedes Wort ein Paar, welches das Wort und die Häufigkeit 1 enthält. Für dasselbe Wort, das mehr als einmal vorkommt, werden mehrere Paare erzeugt
§ Anmerkung: Die Eingabe (dokumentName, wert) ist auch ein Paar, jedoch haben dessen Elemente einen anderen Definitionsbereich als die Elemente der emittierten Paare
8
Beispiel – Reduce REDUCE
KOMBINIERT
ZWISCHENERGEBNISSE
§
§ Beispiel (fortgesetzt)
§ reduce(wort, werte){ int ergebnis = 0; for each w in werte ergebnis += w; emit(wort, ergebnis); }
Liste mit Worthäufigkeiten: Entsteht durch Aufsammeln und Gruppieren mehrerer Paare, die dasselbe Wort als Schlüssel haben (Shuffle) Wird der Reduce-Operation als Iterator übergeben. Auf diese Weise sind große Datenmengen handhabbar, die sonst nicht vollständig in den Speicher passen würden
Summiere die Häufigkeiten aus der Werteliste auf und emittiere das Ergebnis
§ Anmerkung: Elemente der Eingabe-Paars haben denselben Definitionsbereich wie die des Ausgabe-Paars (Yahoo‘s Hadoop ist hier etwas großzügiger.) § Es kann mehrere Arbeiter geben, welche die Reduktionsoperation ausführen und selbst wieder Zwischenergebnisse emittieren
9
MapReduce – Ablauf im Detail (1) User Program (1) fork (1) fork
Master
(2) assign map
(1) fork
(2) assign reduce
worker split split split split split
0 1 2 3 4
(5) remote read
(3) read
worker
worker
(4) local write
worker
(6) write
output file 0 output file 1
worker
Input files
Map phase
Intermediate files (on local disk)
Reduce phase
Output files
10
MapReduce – Ablauf im Detail (2) §
split split split split split
0 1 2 3 4
User Program
Für die parallele Ausführung der Map-Operation (1) submit werden zunächst die Eingabedaten in M disjunkte Master Partitionen ("splits") zerlegt § (2)Etwa 16-64 proschedule Partition (kontrollierbar durch schedule mapMB (2) reduce Parameter) worker § Können parallel auf verschiedenen Rechnern bearbeitet werden (6) write output (5) remote read
(3) read
worker
worker
(4) local write
worker
file 0 output file 1
worker
Input files
Map phase
Intermediate files (on local disk)
Reduce phase
Output files
11
MapReduce – Ablauf im Detail (3) User Program (1) fork (1) fork
Master
(2) assign map
(1) fork
(2) assign reduce
worker split split split split split
0 1 2 3 4
Input files
(5) remote read
(3) read§
Danach: Starte Kopien des (4) local write Programms auf Rechner im worker Cluster (1) § Definiere eine Instanz als Koordinator, den Rest als Arbeiter worker Map phase
Intermediate files (on local disk)
worker
worker
Reduce phase
(6) write
output file 0 output file 1
Output files
12
MapReduce – Ablauf im Detail (4) User Program (1) fork (1) fork
Master
(2) assign map
(1) fork
(2) assign reduce
worker split 0 (5) remote read split 1 (3) read Koordinator § split (Master) weist laufenden Arbeiter(4) local write 2 worker split 3 Instanzen Map- oder Reduce-Aufgabe zu (2) split 4 (beachtet Lokalitätsgesichtspunkte)
§ § Input files
worker
worker
Es werden M Map-Aufgaben und worker R Reduce-Aufgaben zugewiesen Map phase
Intermediate files (on local disk)
Reduce phase
(6) write
output file 0 output file 1
Output files
13
MapReduce – Ablauf im Detail (4) Arbeiter mit Map-Aufgabe Liest Inhalte seiner zugewiesenen Partition (3) (1) fork § Bearbeitet alle Eingabepaare mit seiner Map(1) fork Funktion (1) fork Master § Die Ergebnisse werden im Hauptspeicher (2) assign map (2) assign reduce gepuffert § In periodischen Abständen werden Puffer worker auf Festplatte geschrieben (4) write output (5) remote read § Anhand einer(6) Partitionierungsfunktion worker file (z.B. 0 (4) local write in R Partitionen unterteilt worker hash(key) mod R) output Ablageort der Partitionen wird § Der worker file 1 dem Koordinator gemeldet, der für die worker Übergabe an Reduce-Arbeiter verantwortlich ist Map Intermediate files Reduce Output phase (on local disk) phase files User § Program
split split split split split
0 1 2 3 4
Input files
(3) read
14
MapReduce – Ablauf im Detail (5) Arbeiter mit Reduce-Aufgabe User § Wird vom Koordinator benachrichtigt Program § Bekommt Ablageort für Zwischen(1) fork ergebnisse (Partitionen), die er von den (5)fork Festplatten der Worker liest (1) (1) fork Master § Shuffle: Sortierung der Paare nach Schlüssel, (2) assign map (2) assign reduce so dass Paare mit gleichem Schlüssel gruppiert werden worker § Arbeiter split 0 iteriert darüber (5) remote read § Jeder wird samt der worker splitSchlüssel 1 (3) read (4) local write split 2 zugehörigen Werte der worker split 3 Reduktionsoperation übergeben split 4der Reduktionsfunktion wird in worker § Das Ergebnis einer Ausgabedatei angefügt, die zur worker Partition assoziiert ist (6) Input files
Map phase
Intermediate files (on local disk)
Reduce phase
(6) write
output file 0 output file 1
Output files
15
MapReduce – Ablauf im Detail (6) §
Wenn alle Map- und Reduce-Aufgaben bearbeitet wurden, kehrt der Aufruf zum BenutzerUser Program Programm zurück. (1)§forkDie Ausgabe des MapReduce-Programms befindet sich in R Dateien (eine pro Reduktions(1) fork (1) fork Master Aufgabe) §(2) assign Können als Eingabe für weitere Map-Reduce(2) assign map reduce Aufrufe verwendet werden worker split split split split split
0 1 2 3 4
(5) remote read
(3) read
worker
worker
(4) local write
worker
(6) write
output file 0 output file 1
worker
Input files
Map phase
Intermediate files (on local disk)
Reduce phase
Output files
16
Fehlertoleranz WORKERS § § § § §
Werden periodisch abgefragt, ob noch funktionsfähig Keine Antwort: Kennzeichnung als nicht funktionsfähig Zugewiesene Aufgaben werden vom Koordinator neu verteilt Auch erfolgreich beendete Map-Aufgaben werden neu verteilt, da deren Ausgabe auf lokaler Festplatte war Reduce-Arbeiter werden über Änderung benachrichtigt
KOORDINATOR § Zustand wird regelmäßig gesichert („Checkpointing“) § Bei Versagen: Neustart und Wiederherstellung des letzten gesicherten Zustands
FEHLERTOLERANZ
IST DER ZENTRALE
VORTEIL VON MAPREDUCE!
§ Es geht bei MapReduce nicht nur darum, Rechenaufwand zu parallelisieren.
17
Verteiltes Dateisystem WIE
GELANGEN DIE
VERSCHIEBE
DATEN
NICHT DIE
ZU DEN
DATEN
WORKERS?
ZU DEN
WORKERS,
SONDERN DIE
WORKERS ZU DEN DATEN!
§ Daten sind auf den lokalen Festplatten der einzelnen Knoten im Cluster gespeichert § Starten der Workers an welchen die Daten lokal vorliegen
DATEN
IN EINEM VERTEILTEN
DATEISYSTEM
GESPEICHERT
§ GFS (Google File System) für Googles MapReduce § HDFS (Hadoop Distributed File System) für Hadoop
GOOGLES MAPREDUCE § Map speichert Ergebnis im lokalen Dateisystem. § Reduce holt sich Daten via RPC; schreibt Ergebnis in verteiltes Dateisystem (GFS).
18
MapReduce – Beispiele WETTERDATEN
1. UNSTRUKTURIERTE WETTERDATEN
EINLESEN
§ 0029029070999991901010106004+64333+023450FM-12+00059 9999V0202701N015919999999N0000001N900781+9999910200 1ADDGF108991999999999999999999 1901-01-01 § 0029029070999991901010113004+64333+023450FM-12+00059 13:00 -7,2°c 9999V0202901N008219999999N0000001N9-00721+9999910200 1ADDGF104991999999999999999999
19
MapReduce – Beispiele (2) WETTERDATEN
2. ZUORDNUNG § § §
VON
DATEI-INHALT
ZU POSITIONEN
Jede Zeile wird anhand des Byte-Offsets identifiziert Byte-Offset verweist jeweils auf den Beginn der Zeile (k1, v1) = (long, String)
20
MapReduce – Beispiele (3) WETTERDATEN
3. MAP: TRANSFORMIEREN § §
DIESER
SCHLÜSSEL-/WERTE-PAARE
Benötigte Daten werden aus den Zeilen extrahiert Es entstehen viele Key/Value-Paare
IN
ZWISCHEN-SCHLÜSSEL-WERTE-PAARE Jahr
Temperatur
1950
0
1950
22
1949
111
1949
78
21
MapReduce – Beispiele (4) WETTERDATEN
4. SHUFFLE: ERZEUGEN
VON GRUPPIERTEN
SCHLÜSSEL-/WERTE-PAAREN
§ Sortieren der Schlüssel § Zuordnen von Werten zu einem Schlüssel § Jeder Mapper schreibt den sortierten Output ins Filesystem § Pro Jahr wird ein eigener Reducer auf einem Rechner im Cluster ausgeführt
Jahr
Temperatur
1949
111 78
1950
0 22
22
MapReduce – Beispiele (5) WETTERDATEN
5. REDUCE § §
Zusammenfassung der Werte (hier: Maximum finden) Pro Schlüssel nur noch ein Wert
Jahr
Temperatur
1949
111
1950
22
23
MapReduce – Beispiele (6) WETTERDATEN
6. AUSGABE IN
EINE
DATEI
24
Beispiele, wo MapReduce hilfreich ist VERTEILTE HÄUFIGKEITSANALYSE § Wie häufig kommen welche Wörter in einem umfangreichen Text vor? - Map-Funktion: Schreibt in einen Zwischenspeicher - Reduce-Funktion: Addiert die Werte für ein Wort zu
VERTEILTES GREP § In welchen Zeilen eines Textes kommt ein Suchmuster vor? - Map-Funktion: Schreibt gefundene Zeilen in einen Zwischenspeicher - Reduce-Funktion: Reicht die Zwischenergebnisse zur Ausgabe durch
BERECHNUNG
VON
WEBSEITEN-ANFRAGEN
§ Map-Funktion: Durchsucht die Webserver-Logdaten und schreibt Schlüssel-Wert-Paare in einen Speicher für Zwischenergebnisse § Reduce-Funktion: Addiert die Werte ür eine URL zu
...
25
Analyse – Verteiltes Grep PERFORMANZ § Ausführung eines auf MapReduce basierenden grep-Programms (Global Regular Expression Print) § Durchsucht 10 10 100-Byte lange Datensätze (~ 1TB) nach einem seltenen, drei Zeichen langem Muster (nur in 92.337 Datensätzen vorhanden) § Eingabe in M=15.000 Partitionen à 64MB unterteilt, Ausgabe in einer einzigen Partition (R=1) § Datentransferrate im zeitlichen Verlauf (Cluster mit 1.800 Rechnern, mit je 2GHz Intel Xeon, 4GB RAM, 2x160GB HD, Gigabit Ethernet)
Rate, mit der Eingabedaten gelesen werden
Sekunden nach Ausführung 26
Analyse – Verteiltes Grep (2) PERFORMANZ (FORTSETZUNG) § § § §
Rate nimmt anfangs zu, wenn mehr und mehr Rechnern Arbeit zugewiesen wird Maximum bei ~30GB/s und 1.764 Arbeitern Danach beginnen Map-Aufgaben fertig zu werden Gesamtdauer der Ausführung etwa 150s; Mehraufwand beim Start ~1 Minute (Programm auf verschiedenen Rechnern starten, etc.)
27
Map-Reduce – Implementierungen DAS MAPREDUCE-KONZEPT
IST NICHT AN EINE BESTIMMTE
RECHNERARCHITEKTUR
GEBUNDEN
§ Die Implementierung der Schnittstelle kann z.B. auf Rechner mit verteiltem Speicher (Cluster) oder gemeinsamen Speicher (Multicore-Rechner) zugeschnitten sein § Beispiel für Implementierungen - Auf Architektur mit gemeinsamen Speicher: Phoenix (Stanford, C++/PThreads) - Auf Architektur mit verteiltem Speicher: Google, Hadoop
28
Map-Reduce – Implementierungen (2) PROPRIETÄRE ENTWICKLUNG
DURCH
GOOGLE
§ Implementiert in C++ § Bindings in Java, Python
OPEN-SOURCE-IMPLEMENTIERUNG
IN
J AVA (HADOOP)
§ Ursprünglich von Yahoo entwickelt, produktiv eingesetzt § Mittlerweile Apache-Projekt § http://hadoop.apache.org/mapreduce/
VIELE FORSCHUNGSPROTOTYPEN § Umsetzungen für GPUs - Bingsheng He, Wenbin Fang, Qiong Luo, Naga K. Govindaraju, and Tuyong Wang. Mars: A MapReduce Framework on Graphics Processors. PACT 2008
§ Cell-Prozessoren - Marc de Kruijf and Karthikeyan Sankaralingam. MapReduce for the Cell B.E. Architecture. IBM Journal of Research and Development, 53(5), 2009.
29
Hadoop
Hadoop - Überblick WAS IST HADOOP? § § § §
Hadoop ist eine Implementierung des MapReduce-Konzepts Open Source Projekt der Apache Software Foundation Download für Unix/Linux verfügbar Programmierung mit Java, Python, C++, etc. möglich
HADOOP KOMPONENTEN § Hadoop Common - Stellt Grundfunktionen bereit: implementierungsneutrale File-System-Schnittstelle, Schnittstelle für die RPC-Kommunikation im Cluster
§ Hadoop Distributed FileSystem (HDFS) -
Primäre Dateisystem von Hadoop, folgt dem Vorbild des Google-Dateisystems Eingabe-Dateien müssen erst in das HDFS kopiert werden, bevor sie verwendet werden können Master-Slave Struktur, Fehlertoleranz durch dreifache Redundanz Performanz auf sequentielles Lesen und Schreiben ganzer Blöcke optimiert Es werden auch andere Dateisysteme unterstützt (z.B. CloudStore, S3)
§ Hadoop MapReduce - Bietet alle Funktionen um nach dem MapReduce-Programmiermodell zu entwickeln
31
Hadoop-Anwendungen@Yahoo 2008
2009
Webmap
~70 hours runtime ~300 TB shuffling ~200 TB output 1480 nodes
~73 hours runtime ~490 TB shuffling ~280 TB output 2500 nodes
Sort benchmarks (Jim Gray contest)
1 Terabyte sorted § 209 seconds § 900 nodes
1 Terabyte sorted § 62 seconds, 1500 nodes 1 Petabyte sorted § 16.25 hours, 3700 nodes
Largest cluster
2000 nodes § 6PB raw disk § 16TB of RAM § 16K CPUs
4000 nodes § 16PB raw disk § 64TB of RAM § 32K CPUs § (40% faster CPUs too) 32
Exercise
TPC-H Tips TPC-H: AN AD-HOC,
DECISION SUPPORT BENCHMARK
§ http://www.tpc.org/tpch/default.asp § Consists of a schema, a data generator, and 22 analytical queries
34
TPC-H Tips TPC-H: AN AD-HOC,
DECISION SUPPORT BENCHMARK
§ http://www.tpc.org/tpch/default.asp § Consists of a schema, a data generator, and 22 analytical queries
INSTALLATION § Download the tools, copy and edit makefile.suite, run make § Example settings in makefile: -
DATABASE=ORACLE MACHINE=LINUX WORKLOAD=TPCH On OSX, adding „-I/usr/include/malloc“ to CFLAGS seems necessary
§ dbgen generates data (*.tbl) files, which are usually loaded into an RDBMS - With Hadoop, we just directly read the files from HDFS and map&reduce them line-by-line - dbgen‘s most interesting parameter is the scaling factor (-s) that determines the output database‘s size in GB (roughly). Leaving it at 1 is ok for this exercise, so a call might look like „./dbgen -vf -s 1“
§ qgen fills variables in query template, not necessary for this exercise, just have a look at the query templates in „queries“
35
TPC-H Q1
36
Task GENERATE
A TPC-H DATABASE AND LOAD IT INTO
IMPLEMENT Q1 AS A MAP/REDUCE
HDFS
JOB
§ Think carefully about which parts of the SQL query you put into map() and which into reduce()
PREPARE 1-2 SLIDES WITH
THE MOST INTERESTING/ DIFFICULT PARTS OF THE IMPLEMENTATION, AND DISCUSS. IDEAS FOR
DISCUSSION:
§ How much can this query be parallelized by using Hadoop? What is the bottleneck, i.e., the „most sequential“ part of the calculation? § Is there anything that could be done about this? Is there anything specific in Hadoop that could be done? Under what conditions?
37