MapReduce - Konzept - Abteilung Datenbanken Leipzig - Universität ...

[WHITE 09, Seite 24] [URL 007]. Da die zu verarbeitenden Daten ... liegen zu jedem Schlüssel mehrere Werte vor, wobei jeder Schlüssel genau ein Mal existiert.
1MB Größe 7 Downloads 91 Ansichten
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