Das MapReduce- Programmiermodell

Werbung
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
Herunterladen