MapReduce - Konzept - Abteilung Datenbanken Leipzig

Werbung
Universität Leipzig
Institut für Informatik
Abteilung Datenbanken
Seminararbeit
MapReduce - Konzept
Autor:
Studiengang:
Thomas König (Mat.-Nr. 1740853)
Master Informatik (3. Semester)
Betreuer:
Gutachter:
Lars Kolb
Lars Kolb
Eingereicht am: 31.03.2010
MapReduce - Konzept
Inhaltsverzeichnis
1 Einleitung..................................................................................................................3
1.1 Motivation.............................................................................................................3
1.2 Zielstellung der Arbeit..........................................................................................4
1.3 Aufbau der Arbeit.................................................................................................4
2 MapReduce-Konzept................................................................................................5
2.1 Allgemein.............................................................................................................5
2.2 Funktionsweise....................................................................................................5
2.3 Beispiel.................................................................................................................8
2.3.1 Schritt 1: unstrukturierte Wetterdaten einlesen.............................................8
2.3.2 Schritt 2: Zuordnung von Datei-Inhalt zu Position........................................8
2.3.3 Schritt 3: Erzeugen von Zwischenschlüssel-/-wertepaaren..........................9
2.3.4 Schritt 4: Erzeugen von gruppierten Schlüssel-/Wertepaaren...................10
2.3.5 Schritt 5: Reduce-Task zur Berechnung der Endergebnisse.....................10
2.3.6 Schritt 6: Ausgabe der Daten......................................................................11
3 MapReduce im Vergleich.......................................................................................12
3.1 Vergleich mit relationalen Datenbanken............................................................12
3.2 Vergleich mit parallelen Datenbanken...............................................................13
3.3 Vergleich mit Grid Computing............................................................................16
3.4 Vergleich mit Volunteer-Computing...................................................................17
4 Praktische Anwendungen.....................................................................................19
4.1 Hadoop..............................................................................................................19
4.2 Google's Rechenzentren...................................................................................19
5 Zusammenfassung.................................................................................................21
6 Literaturverzeichnis...............................................................................................22
6.1 Web....................................................................................................................22
6.2 Bücher................................................................................................................23
6.3 Artikel.................................................................................................................23
7 Abbildungsverzeichnis..........................................................................................24
8 Tabellenverzeichnis...............................................................................................25
Seite 2
MapReduce - Konzept
1 Einleitung
1.1
Motivation
Cloud
Computing
beschreibt
die
Verwendung
einer
Technologie,
bei
der
abzuarbeitende Berechnungen nicht auf einem einzigen Computer ausgeführt
werden, sondern auf mehrere Computer in einem Netzwerk aufgeteilt werden. Dabei
werden verschiedene Kapazitäten, wie zum Beispiel Rechenkapazität, dynamisch
über das Netzwerk zur Verfügung gestellt. Die Anwendungen und Daten befinden
sich in der Cloud und werden zum Beispiel über einen Webbrowser gestartet und
verwaltet. [URL 005, URL 006]
Bei der Verwendung von Cloud Computing-Anwendungen kann eine hohe
Rechenkapazität erreicht werden, die die Zeitdauer von Berechnungen je nach
Anzahl der beteiligten Computer bzw. Server beeinflusst. Doch um auch große
Datenmengen verarbeiten zu können, reicht die CPU-Leistung allein nicht aus. Das
Einlesen der Daten hängt vielmehr von den verwendeten Festplatten ab. Zwar sind in
den letzten Jahren die Kapazitäten der Festplatten stark gestiegen, sodass die
Datenmenge an sich kein Problem mehr darstellt, die Zugriffs- und Transferzeiten
haben sich im Vergleich jedoch wenig verbessert. Zum Beispiel benötigt eine 40 GBFestplatte aus dem Jahr 2000 insgesamt 21 Minuten für das Lesen der kompletten
Festplatte (bei 32 MB/s), während eine 1.000 GB-Festplatte von 2009 schon 136
Minuten benötigt (bei 125 MB/s). [WHITE 09, Seite 24] [URL 007]
Da die zu verarbeitenden Daten tendenziell immer größer werden, ist eine Lösung
nötig,
die
neben
der
CPU-Leistung
auch
für
eine
Beschleunigung
der
Datenoperationen vorsieht. Die Voraussetzung ist auch hier das Verbinden von
mehreren Computern zu einem Cluster. Das MapReduce-Konzept sorgt für eine
verteilte Speicherung der Daten auf den unterschiedlichen Computern im Cluster und
parallelisiert zudem Datenoperationen, indem nicht nur eine Recheneinheit alle
Daten einliest, sondern jede Recheneinheit liest jeweils unterschiedliche Daten ein.
Dadurch entsteht eine deutliche Zeitreduzierung bei Zugriffsoperationen, was
besonders bei sehr großen und un- bzw. semistrukturierten Datenmengen von Vorteil
ist. [WHITE 09]
Seite 3
MapReduce - Konzept
1.2
Zielstellung der Arbeit
Zielstellung dieser Arbeit ist es, die Funktionen des MapReduce-Verfahrens zu
betrachten und deren Arbeitsweise zu klären. Weiterhin wird kurz auf das OpenSource-Java-Framework Hadoop als Referenzimplementierung eingegangen, sowie
deren Einsatz an einem eigenem Beispiel untersucht.
1.3
Aufbau der Arbeit
Diese Seminararbeit gliedert sich in zwei Bereiche auf, den theoretischen und den
praktischen Teil.
Der theoretische Teil wird das MapReduce-Konzept untersucht und einen kurzen
Blick auf das Hadoop-Framework werfen. Eine detaillierte Betrachtung von Hadoop
erfolgt in einer separaten Seminararbeit. Weiterhin soll ein Praxis-Beispiel mit der
Verwendung von Hadoop vorgestellt und somit die Anwendung des MapReduceKonzepts demonstriert werden.
Die Seminararbeit endet mit einer Zusammenfassung des untersuchten Themas.
Seite 4
MapReduce - Konzept
2 MapReduce-Konzept
2.1
Allgemein
Bei MapReduce handelt es sich um ein Programmiermodell, welches speziell zur
Verarbeitung von großen Datensätzen eingesetzt wird. Damit eine große Menge an
gesammelten Daten verarbeitet werden kann, muss der Aufwand der dafür benötigen
Berechnungen auf mehrere Recheneinheiten verteilt werden. Mit Hilfe des
MapReduce-Frameworks können solche Berechnungen auf vielen Rechnern parallel
ausgeführt werden. Außerdem ist MapReduce auch dafür zuständig, die Ergebnisse
im Anschluss wieder zu aggregieren. Die eigentliche Aufgabe von MapReduce liegt
hierbei in der Bereitstellung und dem Management der Berechnungsinfrastruktur. Ein
Entwickler, der eine verteilte Anwendung implementiert, muss sich also nicht mit der
Parallelisierung beschäftigen und kann für diese Zwecke ohne viel Aufwand auf die
Mechanismen des MapReduce-Frameworks zurückgreifen. Auf Basis dessen können
verteilte Anwendungen problemlos auch auf eine hohe Anzahl an Clients
hochskalieren, ohne dass Codeänderungen nötig werden. Ein großer Vorteil des
MapReduce-Ansatzes ist die Möglichkeit, handelsübliche Standard-Hardware statt
kostenintensiven High-End-Servern zu verwenden. Ein Cluster kann somit auch ohne
spezielle Server aufgebaut und betrieben werden. [OSDI 04]
2.2
Funktionsweise
Die MapReduce-Konzept beruht auf zwei separaten Abläufen: Map und Reduce. Die
Map-Vorgänge starten mit dem Einlesen der Daten. Es erfolgt eine Transformation
der Eingabedaten, die ungeordnet vorliegen, in Schlüssel-/Werte-Paare. Das
Auslesen der Daten wird in mehreren Map-Tasks auf mehreren Recheneinheiten
ausgeführt, was bedeutet, dass die Daten parallel eingelesen werden, wobei jede
Recheneinheit in der Regel unterschiedliche Blöcke der Dateien einliest. Nach dem
ersten Schritt, dem Extrahieren der benötigten Informationen aus dem unsortierten
Datenstrom, erhält man als Ergebnis Schlüssel-/Wertepaare mit dem Byte-Offset des
Seite 5
MapReduce - Konzept
Datenstroms (als Schlüssel) sowie die zugehörige Datenzeile (als Wert), was mit der
Signatur der Map-Funkion ausgedrückt werden kann:
map: k1, v1 → list(k2, v2)
Im
Anschluss
daran
verarbeitet
der
Map-Task
jeden
Eintrag
dieses
Schlüssel-/Wertepaares und extrahiert die benötigten Informationen. Es wird ein
neues Zwischenschlüssel-/-wertepaar erzeugt und einem Schlüssel ein Wert
zugeordnet. Nach einer Gruppierung dieser Paare liegen zu jedem Schlüssel
mehrere Werte vor, wobei jeder Schlüssel genau ein Mal existiert.
[k2, list(v2)]
Jeder ablaufende Reduce-Task verarbeitet nun eine oder mehrere gruppierte
Schlüssel-/Wertepaare und ordnet einem Schlüssel die benötigte Eigenschaft zu,
etwa die Summe der Werteliste oder das Maximum aller gesammelten Werte einer
Gruppe. Es entstehen Schlüssel-/Wertepaare, bei denen jedem Schlüssel nur ein
Wert zugeordnet wird.
reduce: k2, list(v2) → list(k3, v3)
Für die Aufteilung der Reduce-Tasks ist die Partitionierungsfunktion zuständig, die
auf
Basis
der
intermediaten
Schlüssel-/Wertepaare
arbeitet
und
den
Partitionierungsindex an die Reducer übergibt, wobei die festgelegte Anzahl an
Reducern als Parameter an die Funktion übergeben wird. Als Partitionierungsindex
dient der Schlüssel, zugehörige Werte werden ignoriert.
partition: (k2, v2) → integer
Die nachstehende Grafik verdeutlicht den Ablauf noch einmal.
Kapitel nach [WHITE 09, OSDI 04, URL 001]
Seite 6
MapReduce - Konzept
Abbildung 2.1: Ablauf von Map und Reduce [WHITE 09, Seite 163]
Seite 7
MapReduce - Konzept
2.3
Beispiel
Im
folgenden
Beispiel
sollen
Temperaturdaten
aus
einem
unstrukturierten
Datenstrom im Form von Textdateien gelesen werden. Es ist bekannt, wie lang ein
Datensatz ist und an welchen String-Positionen sich die benötigten Daten befinden.
Ziel des Beispiels ist die Ermittlung der maximalen Temperatur eines Jahres. Die
einzelnen Schritte lassen sich anhand der nachstehenden Grafik überblicken.
Abbildung 2.2: Beispielablauf für die Verarbeitung von Wetterdaten
2.3.1 Schritt 1: unstrukturierte Wetterdaten einlesen
Ein Datensatz, der in den Textdateien durch eine einzige Zeile repräsentiert wird, hat
die folgende Struktur:
0029029070999991901010113004+64333+023450FM-12+000599999V02029
01N008219999999N0000001N9-00721+99999102001ADDGF10499199999999
9999999999
In einem Datensatz sind unter anderem das Datum und die Uhrzeit der Erstellung
sowie die Temperatur zu diesem Zeitpunkt hinterlegt. Der Beispiel-Datensatz wurde
am 01. Januar 1901 um 13:00 Uhr aufgezeichnet, die Temperatur betrug -7,2 °C (s.
rote Markierung).
Im ersten Schritt werden sämtliche Daten parallel eingelesen.
2.3.2 Schritt 2: Zuordnung von Datei-Inhalt zu Position
Da bekannt ist, wie lang ein Datensatz ist, kann aus der unstrukturierten
Datenmenge eine Liste von Schlüssel-/Wertepaaren erzeugt werden, wobei als
Seite 8
MapReduce - Konzept
Schlüssel der Byte-Offset des Zeilenanfangs dient und als Wert die Zeile, also der
Datensatz, selbst.
Die Erzeugung der Schlüssel-/Wertepaare kann mit (k1, v1) = (long, String)
gleichgesetzt werden.
Byte-Offset
Datensatz
0
0029029070999991901010113004+6...
106
0029029070999991901010114004+6...
212
0029029070999991901010115004+6...
318
0029029070999991902010104004+6...
424
0029029070999991903081223004+6...
Tabelle 2.1: Ausgangslage: ungeordnete Schlüssel-/Wertepaare
2.3.3 Schritt 3: Erzeugen von Zwischenschlüssel-/-wertepaaren
Nach dem Zuordnen der Datensätze zu Byte-Offsets werden im dritten Schritt die
benötigten Daten aus jedem Datensatz extrahiert, was als Map-Task geschieht.
Ergebnis der Extraktion sind Zwischenschlüssel-/Wertepaare. Als Zwischenschlüssel
dient in diesem Beispiel die Jahreszahl, der zugeordnete Wert ist die Temperatur des
zugehörigen Datensatzes multipliziert mit 10. Es entstehen zahlreiche Key/ValuePaare mit identischen Schlüsseln, die in der Form k1, v1, k2, v2 = int vorliegen.
Jahr
Temperatur
1950
0
1950
22
1950
-11
1949
111
1949
78
Tabelle 2.2: Zwischenschlüssel-/Wertepaare
Seite 9
MapReduce - Konzept
2.3.4 Schritt 4: Erzeugen von gruppierten Schlüssel-/Wertepaaren
Im weiteren Verlauf des Map-Vorgangs erfolgt eine Gruppierung der Key/ValuePaare. Dazu werden zunächst alle vorhandenen Schlüssel sortiert und im Anschluss
daran zu jedem Schlüssel alle vorhandenen Werte gesucht und diesem zugeordnet,
sodass
am
Ende
des
Map-Vorgangs
ein
Bestand
aus
gruppierten
Zwischenschlüssel-/Wertepaaren vorliegt. Jeder Zwischenschlüssel existiert nun
genau ein Mal und enthält einen oder mehrere Werte, die ihm während des MapVorgangs zugeordnet wurden. Die entstandenen Schlüssel und Werte liegen hier
ebenfalls als integer-Wert vor.
Jahr
Temperatur
1949
111
78
1950
0
22
-11
Tabelle 2.3: Ergebnis des Map-Vorgangs
Da mehrere Map-Tasks parallel auf mehreren Recheneinheiten ausgeführt werden,
ist es nötig, dass jeder Mapper seinen sortierten Output ins Dateisystem schreibt. Die
Partitionierungsfunktion
erstellt
auf
Basis
der
intermediaten
Schlüssel
die
Partitionierungsindizes und ermöglicht so ein Zuordnen der Schlüssel zu einer zuvor
bestimmten Anzahl an Reducern.
2.3.5 Schritt 5: Reduce-Task zur Berechnung der Endergebnisse
Nach dem erfolgreichen Abarbeiten des Map-Vorgangs erfolgt der Ablauf der
Reduce-Funktion, die als Eingabedaten die zuvor gruppierten Zwischenschlüssel-/
Wertepaare erhält. In diesem Beispiel wird pro Jahr ein eigener Reducer auf einem
Rechner im Cluster gestartet. Dabei holen sich die Reducer die ihnen zugeordneten
Partitionen von den einzelnen Mappern ab, führen den sortierten Eingabestrom
zusammen (merge) und übergeben die nun erzeugten list(k2, list(v2)) an die
Reduce-Funktion.
Seite 10
MapReduce - Konzept
Je nach gewünschtem Ergebnis werden nun die Werte in jeder Gruppe
weiterverarbeitet. Pro Jahr soll die Maximaltemperatur ermittelt werden, sodass nach
dem Reduce-Schritt eine neue Liste von Schlüssel-/Wertepaaren vorhanden ist,
wobei jedem (einzigartigem) Schlüssel nur noch ein Wert zugeordnet wird. Diese
Schlüssel und Werte werden, wie zuvor auch, als integer-Werte zurückgegeben.
Jahr
Temperatur
1949
111
1950
22
Tabelle 2.4: Endergebnis nach dem Reduce-Vorgang
2.3.6 Schritt 6: Ausgabe der Daten
Der letzte Schritt besteht nur noch in der Ausgabe der Key/Value-Paare in eine
Datei, in der zum Beispiel die Schlüssel und Werte durch ein Komma getrennt
eingetragen werden und jedes Paar durch einen Zeilenumbruch getrennt wird.
Kapitel nach [WHITE 09, OSDI 04, URL 001]
Seite 11
MapReduce - Konzept
3 MapReduce im Vergleich
3.1
Vergleich mit relationalen Datenbanken
Bei der Verwendung von MapReduce stellt sich die Frage, ob es nicht doch einfacher
wäre, sämtliche zu verarbeitende Daten in einer relationalen Datenbank zu speichern
und von dort auszulesen anstatt ein MapReduce-Framework zu verwenden. Um
darauf eine Antwort geben zu können, muss man die Ziele und Anwendungsmöglichkeiten der jeweiligen Techniken näher betrachten.
Liegen strukturierte Daten vor und ist darüber hinaus auch das Schema bekannt, so
liegt der Vorteil bei den relationalen Datenbanken. Das gezielte Abfragen von bestimmten Spalten einer Tabelle eignet sich besonders bei „wenigen“ abzufragenden
Datensätzen aufgrund des bekannten Schemas und der verfügbaren Indexe. Somit
kann ein effizienter Zugriff auf einzelne Datensätze und Attribute gewährleistet werden. Änderungsmöglichkeiten der Daten sind bei relationalen Datenbanken ebenfalls
vorhanden und leicht durchführbar, im Gegensatz zu den unstrukturierten Daten, die
beim MapReduce-Framework zum Einsatz kommen. Hier kommt das Zugriffsmuster
„Write once, read many times“ zum Einsatz, was bedeutet, dass effiziente Lese- und
Schreibzugriffe nicht möglich sind. Für das MapReduce und dessen unstrukturierte
Datenmengen spricht jedoch die enorme Datenmenge an sich und die Skalierbarkeit.
Mehrere Recheneinheiten im Cluster lesen parallel ein und können somit ein
Vielfaches der Datenmenge im Vergleich zu relationalen Datenbanken handhaben.
Je mehr Recheneinheiten, umso schneller kann das Einlesen erfolgen.
Während MapReduce also für das sequentielle (parallele) Einlesen von großen
Datenmengen geeignet ist, spielen die relationalen Datenbanksysteme ihre Stärken
bei bekannten Strukturen, Punktanfragen und Änderungsoperationen aus.
Seite 12
MapReduce - Konzept
Traditional RDMBS
MapReduce
Data size
Gigabytes
Petabytes
Access
Interactive and Batch
Batch
Updates
Read and write many times
Write once read many times
Structure
Static schema
Dynamic schema
Integrity
High
Low
Scaling
Nonlinear
Linear
Tabelle 3.1: Vergleich von RDBMS und MapReduce [WHITE 09, Seite 5]
3.2
Vergleich mit parallelen Datenbanken
Bei parallelen Datenbanken handelt es sich ebenfalls um mehrere Recheneinheiten,
die über ein Netzwerk verbunden sind.
„Unter der Bezeichnung "Mehrrechner-Datenbanksysteme" sollen
sämtliche Architekturen zusammengefaßt werden, bei denen mehrere
Prozessoren oder DBVS-Instanzen an der Verarbeitung von DBOperationen beteiligt sind. Dabei ist natürlich eine Kooperation der
Prozessoren bzw. DBVS bezüglich der DB-Verarbeitung bestimmter
Anwendungen vorzusehen, um den Fall voneinander isoliert arbeitender
DBVS oder Prozessoren auszuschließen.“ [RAHM 01]
Hierbei können insgesamt drei verschiedene Architekturen unterschieden werden.
•
Shared-Everything: Alle Recheneinheiten teilen sich einen gemeinsamen
Speicher für die Lese- und Schreibvorgänge. „Die DB-Verarbeitung erfolgt
durch ein DBVS1 auf einem Multiprozessor“. [RAHM 01]
•
Shared-Nothing: Sämtliche Recheneinheiten verfügen über ihren eigenen
Multiprozessor. Der gemeinsame Speicher wird unter den Recheneinheiten
partitioniert,
sodass
jede
Recheneinheit
seinen
eigenen
lokalen
Speicherbereich hat und nur auf diesen zugreifen kann. [RAHM 01]
•
Shared-Disk: Es handelt sich um eine ähnliche Anordnung wie SharedNothing, allerdings existiert hier ein gemeinsamer Speicherbereich, der nicht
aufgeteilt
wird.
Lese-
und
Schreibzugriffe
1 Datenverwaltungssystem
Seite 13
erfolgen
somit
auf
den
MapReduce - Konzept
gemeinsamen Speicherbereich, der allen Recheneinheiten zugänglich ist.
[RAHM 01]
Bei
parallelen
Datenbanksystemen
werden,
wie
bei
relationalen
Daten-
banksystemen, Tabellen mit Zeilen und Spalten eingesetzt, die ebenfalls bei SQL
abgefragt werden können. Das Abfragen der bekannten Struktur per SQL kann
aufgrund der Parallelverarbeitung jedoch deutlich schneller geschehen als es bei relationalen Datenbanken der Fall ist, da, je nach Partitionierung der Speicherbereiche,
eine Tabelle auf mehrere Recheneinheiten verteilt werden kann. Das dahinter
liegende Verfahren wird als horizontale Partitionierung bezeichnet. [STONE 10]
„The idea behind horizontal partitioning is to distribute the rows of a
relational table across the nodes of the cluster so they can be processed
in parallel. For example, partitioning a 10-million-row table across a cluster
of 50 nodes, each with four disks, would place 50,000 rows on each of the
200 disks.“ [STONE 10]
Somit können also größere Datenmengen in der selben Zeitdauer gelesen, geändert
oder gelöscht werden, was bei (mehreren) hundert Gigabyte pro Tabelle eine
deutliche Zeitreduktion ergibt. Der Nachteil der Parallelisierung liegt in den Kosten.
Für den Betrieb von parallelen Datenbanksystemen kommen ausschließlich HighEnd-Server zum Einsatz, die hohe Kosten verursachen. Darüber hinaus verursacht
auch
das
Datenbankverwaltungssystem
hohe
Kosten,
sofern
mehrere
Recheneinheiten im Cluster vorhanden sind. Für Single-Node-Systeme existieren
dagegen diverse Open Source-Implementierungen, die zur freien Verfügung stehen.
[STONE 10]
In der Literatur existieren einige vergleichende Aussagen bezüglich MapReduce und
parallelen Datenbanksystemen, die im Folgenden kurz vorgestellt werden sollen.
Sobald sämtliche Daten vom Speicher eingelesen wurden, haben parallele
Datenbanksysteme demnach Geschwindigkeitsvorteile beim Abfragen der benötigten
Daten, wohingegen MapReduce Geschwindigkeitsvorteile während des parallelen
Einlesens der Daten aufweisen kann, da Datenbanksysteme beim Einlesen
langsamer sind. [STONE 10]
MapReduce profitiert bei den Berechnungen und der CPU-Leistung ebenso von der
Anzahl der Recheneinheiten im Cluster wie die parallelen Datenbanksysteme, diese
Seite 14
MapReduce - Konzept
bieten jedoch zusätzlich den Vorteil der Abfragesprache SQL. [STONE 10] Für die
Open Source-Implementierung Hadoop, die das MapReduce-Konzept umsetzt,
existieren die Erweiterungen HadoopDB und Hive, die das MapReduce-Konzept um
eine SQL-ähnliche Abfragesprache erweitern (Hive) oder PostegreSQL und Hadoop
verbinden (HadoopDB). HadoopDB kann somit eine ähnliche Geschwindigkeit wie
die parallelen DBS erreichen. [URL 008, URL 009, URL 010, RASIN 09]
Die Vorteile von MapReduce liegen bei den semistrukturierten Daten, deren
Einlesezeit von der Anzahl der Recheneinheiten im Cluster bestimmt wird, was
besonders bei komplexen Datenanalysen (wie etwa Data Mining) und dem damit
verbundenen komplexen Datenfluss einen Vorteil gegenüber den parallelen DBS
ergibt, da hier keine SQL-Queries verwendet werden können. [STONE 10]
Ein weiterer Vorteil von MapReduce liegt bei der Fehlertoleranz. Da die
Eingabedaten blockweise auf den Recheneinheiten im Cluster gespeichert werden
und als Folge davon redundant vorhanden sind, kann bei einem fehlerhaften MapTask einfach eine andere Recheneinheit diesen einen Task wiederholen. Parallele
Datenbanksysteme müssen mit Transaktionen umgehen können, was bedeutet, dass
eine fehlgeschlagene Query komplett wiederholt werden muss. [PAVLO 09]
Weitere Vergleiche werden in [STONE 10, PAVLO 09 und RASIN 09] durchgeführt
und sollen an dieser Stelle nicht näher vertieft werden.
Parallele DBS
MapReduce
Datengröße
Gigabytes - Petabytes
Petabytes
Struktur
Statisches Schema
Semistrukturierte Daten
Partitionierung
Horizontal
Blöcke in DFS (Byteweise)
Anfrage
Deklarativ (SQL)
MapReduce-Programme
Zugriff
Punkt/Bereich via Indexes
Batch
Updates
Read and write many times
Write once read many times
Scheduling
Compile-time
Runtime
Verarbeitung
Effizienter Zugriff auf Attribute Parsen jeden Tupels zur
möglich (Storage Manager)
Laufzeit
Datenfluss
Push – Pipelining von Tupeln
zwischen Operationen
Pull – Materialisierung von
Zwischenergebnissen
Fehlertoleranz
Query-Restart (z.T. Operator-
Neustart des Map-/Reduce-
Seite 15
MapReduce - Konzept
Parallele DBS
MapReduce
Restart)
Tasks
Skalierbarkeit
Linear (existierende Setups)
Linear
Umgebung
Homogen (High-EndHardware)
Heterogen (StandardHardware)
Kosten
Sehr teuer
Open Source
Tabelle 3.2: Vergleich von parallelen DBS und MapReduce [nach Lars Kolb]
3.3
Vergleich mit Grid Computing
Neben MapReduce existiert eine weitere Anordnung, bei Recheneinheiten zu einem
Cluster verbunden werden: Grid Computing. Allerdings gibt es auch hier
Unterschiede, die sich vor allem im Anwendungszweck und in der Datenverarbeitung
äußern.
Grid Computing wird größtenteils für rechenintensive Jobs verwendet, wie zum
Beispiel bei der Pharmaforschung oder um andere wissenschaftliche Probleme zu
lösen. Dabei werden normale Computer über ein Netzwerk zu einem Supercomputer
mit enormer Rechenkraft verbunden. [URL 004] Was für die Berechnungen von
Vorteil ist, stellt sich bei den Datenzugriffen als Nachteil heraus. Benötigte Daten
müssen über das Netzwerk gestreamt werden, die Netzwerkanbindung ist hierbei der
Flaschenhals, da die einzelnen Rechner eines Grids standortunabhängig aufgebaut
werden können. Während des Datenaustauschs erfolgt eine Unterbrechung der
Berechnungen. Im Gegensatz dazu hat jeder Rechner des MapReduce-Clusters
(mindestens) eine Kopie der Daten lokal verfügbar und kann aufgrund der parallelen
Datenzugriffsoperationen
schneller
arbeiten.
Ein
fehlerhaftes
Einlesen
kann
problemlos wiederholt werden.
Für Grid Computing existiert eine API, die unter dem Namen „Message Passing
Interface“ (MPI) bekannt ist. Die API bietet dem Programmierer Freiheiten bei der
Gestaltung der Prozesse, verlangt im Gegenzug aber auch das eigenhändige
Implementieren der Datenoperationen auf Low Level Ebene (C Routinen und
Konstrukte, z.B. Sockets), die Berechnungen können als High Level Algorithmus
implementiert werden. MapReduce arbeitet ausschließlich auf High Level Ebene und
Seite 16
MapReduce - Konzept
übernimmt ohne Zutun des Programmierers sämtliche Dateioperationen. Die
Berechnungen können jedoch nur über Key/Value-Paare erfolgen und sind
dahingehend eingeschränkt. Es gibt eine Vielzahl von Aufgaben, die sich dennoch
mit MapReduce erledigen lassen,
wie Bildanalysen oder „machine learning
algorithms“. [WHITE 09, Seite 8]
Ein weiterer Unterschied ist die Fehlerbehandlung. Der Grid-Programmierer muss
selbst für eine geeignete Implementation sorgen, was ihm zwar mehr Kontrolle gibt,
aber auch einen höheren Aufwand nach sich zieht. Fehlerbehandlungen bei
MapReduce werden vom Framework automatisch durchgeführt, fehlerhafte Map- und
Reduce-Tasks werden automatisch neu gestartet, falls ein Fehler entstanden ist.
[WHITE 09, Seite 6ff]
Datengröße
Grid Computing
MapReduce
Gigabytes - Petabytes
Petabytes
Datenspeicherung Streaming der Daten über das Lokale Kopie auf jedem
Netzwerk
Rechner
Fehlertoleranz
Muss vom Programmierer
implementiert werden
Neustart des Map-/ReduceTasks
Skalierbarkeit
Linear
Linear
Umgebung
Heterogen (StandardHardware)
Heterogen (StandardHardware)
Anwendungsziel
CPU-intensive Berechnungen
Datenverarbeitung
Tabelle 3.3: Vergleich von Grid Computing und MapReduce [nach WHITE 09, S. 6ff]
3.4
Vergleich mit Volunteer-Computing
Zu Volunteer-Computing zählt beispielsweise SETI@home („Search for ExtraTerrestrial Intelligence“). Bei diesem Projekt werden Daten von Radioteleskopen im
Bezug auf Anzeichen von intelligentem Leben im Weltall ausgewertet. Die
Berechnungen werden auf den Computern von Privatanwendern ausgeführt. Bei
wenig anliegender CPU-Last übernehmen diese die Auswertung der SETI-Daten,
wobei jeder Teilnehmer nur ein kleines Datenpaket (ca. 0,35 MB) erhält uns dieses
dann auswertet. Trotz dieser geringen Datenmenge dauert die Berechnung mehrere
Seite 17
MapReduce - Konzept
Stunden oder gar Tage. Die Anwendungsbereiche liegen beim Volunteer-Computing
also eindeutig auf der Bereitstellung von Prozessorleistung und nicht auf dem
zügigen Einlesen von riesigen Datenmengen, obwohl auch bei MapReduce die
gesamte Datenmenge in kleinere Blöcke geteilt wird. Betrugsversuche und falsche
Berechnungen werden mit bestimmten Maßnahmen automatisch abgesichert. Ein
weiterer Unterschied besteht im Aufbau der jeweiligen Cluster. MapReduce-Tasks
werden in einem Cluster ausgeführt, deren einzelne Recheneinheiten in der Regel
über ein schnelles Netzwerk verbunden sind, während beim Volunteer-Computing
der Netzwerkverkehr durch die Internetanbindung des Teilnehmers bestimmt wird.
[WHITE 09, Seite 8]
Volunteer Computing
MapReduce
Datengröße
Kilobytes - Megabytes
Petabytes
Datenhaltung
Streaming der Daten über das Lokale Kopie auf jedem
Netzwerk
Rechner
Fehlertoleranz
Wird vom Projekt bzw. vom
Server geregelt
Neustart des Map-/ReduceTasks
Umgebung
Heterogen (StandardHardware)
Heterogen (StandardHardware)
Netzwerkanbindung
Beschränkt auf die
Internetverbindung der
Teilnehmer
Hochgeschwindigkeitsnetzwerk
Anwendungsziel
CPU-intensive Berechnungen
Datenverarbeitung
Tabelle 3.4: Vergleich von Volunteer Computing und MapReduce [nach WHITE 09,
Seite 8]
Seite 18
MapReduce - Konzept
4 Praktische Anwendungen
4.1
Hadoop
Hadoop ist die OpenSource-Implementierung des MapReduce-Konzepts. Es handelt
sich um ein Open Source Projekt der Apache Software Foundation, das offen für
freiwillige Teilnehmer ist. Das von ihnen bereitgestellte Framework dient der
Programmierung von MapReduce-Tasks und ist, wie es das MapReduce-Konzept
vorsieht, auf große Datenmengen spezialisiert, die parallel auf mehreren Computern
abgearbeitet werden, die zu einem Cluster verbunden wurden. Das Framework steht
für Unix/Linux zum Download bereit und setzt eine installierte Java Virtual Machine
1.6 voraus, sofern man das Framework in Java-Applikationen verwenden möchte.
Sämtliche Daten, die im Cluster zur Verfügung stehen sollen, müssen zunächst von
der eigenen Festplatte auf das verteilte Dateisystem übertragen werden. Nach dem
Kopiervorgang ist das Framework in der Lage, einen MapReduce-Task durchzuführen. An dieser Stelle soll nicht näher auf die Ausführung eingegangen werden.
Mit Hive und HadoopDB erhält der Anwender zwei interessante Erweiterungen. Hive
erweitert das Hadoop-Framework um die auf SQL basierende Anfragesprache QL
und ermöglicht so „die Verwendung einer SQL-ähnlichen Syntax“. [URL 008] Bei
HadoopDB handelt es sich um eine Kombination aus Hadoop und der freien
Datenbank PostegreSQL. HadoopDB bietet damit die Skalierbarkeit von Hadoop und
die Geschwindigkeit von parallelen Datenbanken. [URL 008, URL 009, URL 010,
RASIN 09]
4.2
Google's Rechenzentren
Die Verwendung der Suchmaschine Google erfolgt durch das einfache Benutzen der
Weboberfläche. Welche Hardwarebasis bei einer Suchabfrage zum Einsatz kommt,
ist nicht ersichtlich. Zur Erstellung der enormen Datenmengen werden zahlreiche
Suchindexe und Page-Rank-Tabellen benötigt, die in Rechenzentren verwaltet
werden. Laut Informationen von Google soll ein Rechenzentrum aus 45 Containern
Seite 19
MapReduce - Konzept
bestehen, in denen insgesamt 45.000 Server untergebracht werden. Mit einem
solchen Cluster wird das Crawlen und Aufbereiten der Suchergebnisse durchgeführt.
Aufgrund der ständig steigenden Datenmengen setzt Google seit 2005 solche
Rechenzentren ein.
Abbildung 4.1: Google Rechenzentrum
Der Energieverbrauch einer solchen Serverfarm beläuft sich auf 10 Megawatt, was
einige Kühltürme, die mit Wasser betrieben werden, sowie ein eigenes Kraftwerk
notwendig macht. Bei der Stromerzeugung sollen hocheffiziente Transformatoren
zum Einsatz kommen. [URL 002]
Der Großteil der Rechenzentren befinden sich in Nordamerika und Europa, nur
wenige Rechenzentren wurden in Südamerika und Asien errichtet.
Abbildung 4.2: Standorte der Google Rechenzentren [URL 003]
Seite 20
MapReduce - Konzept
5 Zusammenfassung
Für die verteilte Abarbeitung von Aufgaben bietet sich ein Cluster an, das aus
mehreren Recheneinheiten besteht. Während es für CPU-intensive Aufgaben oder
das schnelle und gezielte Abfragen von Datenbanken diverse Techniken zur
Verfügung stehen, bietet sich das MapReduce-Konzept vor allem für die schnelle
Verarbeitung
von
semistrukturierter
riesigen
Form
Datenmengen
vorliegen.
Der
an,
die
in
unstrukturierter
Geschwindigkeitsvorteil
entsteht
oder
bei
MapReduce in Einlesevorgängen, die parallel auf den vorhandenen Recheneinheiten
durchgeführt werden. Jeder Rechner im Cluster liest einen anderen Block der Daten
ein. Je mehr Rechner im Cluster vorhanden sind, umso schneller kann das Einlesen
erfolgen.
Das
MapReduce-Konzept
sieht
außerdem
vor,
dass
sämtliche
Fehlerbehandlungen vom Framework übernommen werden und dem Anwender
diesen Aufwand ersparen. Auch regelt das Framework selbstständig, welche
Recheneinheit welche Daten einliest und verarbeitet und wie die Aufteilung der
Berechnungen erfolgt.
Das MapReduce-Framework untergliedert die Aufgaben in Map- und Reduce-Tasks.
Grundlage der Verarbeitung sind Key/Value-Paare, die bis zur Beendigung der
Reduce-Tasks einige Zwischenschritte, wie zum Beispiel das Sortieren und
Gruppieren, erfahren.
Das von Google entwickelte MapReduce-Konzept kann als Open SourceImplementierung Hadoop auf jedem beliebigen Rechner frei verwendet werden.
Die behandelten Vergleiche haben verdeutlicht, dass das Einsatzgebiet von
MapReduce in den parallelen Datenzugriffsoperationen von riesigen Datenmengen,
wie zum Beispiel dem Einlesen von Page-Rank-Tabellen, zu suchen ist und weniger
bei der komplexen und CPU-intensiven Berechnung von Ergebnissen. Vielmehr
sollen die eingelesenen Daten auf vergleichsweise einfache Art und Weise
weiterverarbeitet werden.
Seite 21
MapReduce - Konzept
6 Literaturverzeichnis
6.1
Web
URL 001
http://www.slideshare.net/Wombert/an-introduction-to-mapreduce
aufgerufen am 26.11.2009
URL 002
http://blogoscoped.com/archive/2009-04-08-n39.html
aufgerufen am 26.11.2009
URL 003
http://royal.pingdom.com/2008/04/11/map-of-all-google-data-centerlocations/
aufgerufen am 26.11.2009
URL 004
http://de.wikipedia.org/wiki/Grid-Computing
aufgerufen 10.02.2010
URL 005
http://en.wikipedia.org/wiki/Cloud_computing
aufgerufen 27.02.2010
URL 006
http://de.wikipedia.org/wiki/Cloud_Computing
aufgerufen 27.02.2010
URL 007
http://de.wikipedia.org/wiki/Festplatte
aufgerufen 27.02.2010
URL 008
http://de.wikipedia.org/wiki/Hadoop
aufgerufen 28.02.2010
URL 009
http://www.heise.de/newsticker/meldung/HadoopDB-versoehnt-SQLmit-Map-Reduce-6689.html
aufgerufen 28.02.2010
URL 010
http://www.golem.de/0907/68643.html
aufgerufen 28.02.2010
Seite 22
MapReduce - Konzept
6.2
Bücher
WHITE 09
Tom White:
Hadoop – The Definite Guide
O'Reilly Media, 2009
RAHM 01
Erhard Rahm:
Mehrrechner-Datenbanksysteme
Springer, 2001
6.3
Artikel
OSDI 04
Jeffrey Dean and Sanjay Ghemawat
MapReduce: Simplifed Data Processing on Large Clusters
STONE 10
Michael Stonebraker, Daniel Abadi, David J. Dewitt, Sam Madden,
Erik Paulson, Andrew Pavlo, Alexander Rasin:
MapReduce and Parallel DBMSs: Friends or Foes?
Communications of the ACM, Januar 2010
RASIN 09
Azza Abouzeid, Kamil Bajda-Pawlikowski, Daniel Abadi, Avi
Silberschatz, Alexander Rasin:
HadoopDB: An Architectural Hybrid of MapReduce and DBMS
Technologies for Analytical Workloads
2009
PAVLO 09
Andrew Pavlo, Erik Paulson, Alexander Rasin, Daniel J. Abadi, David
J. DeWitt, Samuel Madden, Michael Stonebraker:
A Comparison of Approaches to Large-Scale Data Analysis
2009
Seite 23
MapReduce - Konzept
7 Abbildungsverzeichnis
Abbildung 2.1: Ablauf von Map und Reduce [WHITE 09, Seite 163]............................7
Abbildung 2.2: Beispielablauf für die Verarbeitung von Wetterdaten...........................8
Abbildung 4.1: Google Rechenzentrum......................................................................20
Abbildung 4.2: Standorte der Google Rechenzentren [URL 003]...............................20
Seite 24
MapReduce - Konzept
8 Tabellenverzeichnis
Tabelle 2.1: Ausgangslage: ungeordnete Schlüssel-/Wertepaare................................9
Tabelle 2.2: Zwischenschlüssel-/Wertepaare...............................................................9
Tabelle 2.3: Ergebnis des Map-Vorgangs...................................................................10
Tabelle 2.4: Endergebnis nach dem Reduce-Vorgang...............................................11
Tabelle 3.1: Vergleich von RDBMS und MapReduce [WHITE 09, Seite 5]................13
Tabelle 3.2: Vergleich von parallelen DBS und MapReduce [nach Lars Kolb]...........16
Tabelle 3.3: Vergleich von Grid Computing und MapReduce [nach WHITE 09, S. 6ff]
.....................................................................................................................................17
Tabelle 3.4: Vergleich von Volunteer Computing und MapReduce [nach WHITE 09,
Seite 8].........................................................................................................................18
Seite 25
Herunterladen