Thema: Das MapReduce-Framework - Friedrich-Schiller

Werbung
Software as a Service
Cloud Computing und aktuelle Entwicklungen
Seminararbeit
Thema: Das MapReduce-Framework
Betreuer:
Prof. Dr. Klaus Küspert
Dipl.-Inf. Andreas Göbel
Nicky Kuhnt
Friedrich-Schiller-Universität Jena
Studiengang: Informatik, Diplom
Matrikel: 96577
Gliederung
1. Einführung……………………………………………………………...……..………..2
2. Motivation…………………………………………………………………….…..……2
3. MapReduce Verfahren……………………………………………….…….…………..3
3.1. Einführung……………………………………………………...…….…………...3
3.2. Definition………………………………………………..…………….…………..3
3.3. Map-Phase…………………………………………………………….…………..4
3.4. Shuffle-Phase……………………………………………….……….…………….4
3.5. Reduce-Phase………………………………………………..…….………………5
3.6. Überblick………………………………………………………………………….6
3.7. Funktionsweise und Fehlerbehandlung……………………………………………7
4. Beispiel………………………………………………………..……….………………7
5. Vergleich mit relationalen Mehrrechner-Datenbanken……………….…………..…...9
6. Hadoop………………………………………………….…………………...………..11
7. HadoopDB…………………………………………………………………………….12
8. Zusammenfassung………………………………………………………………........12
9. Quellen………………………………………………………………………………..13
Bemerkung: Sollte ein Literaturangabe am Ende eines Kapitels stehen, so bezieht sie sich
auf das gesamte Kapitel, sonst nur auf den jeweiligen Abschnitt.
-1-
1. Einführung
Cloud Computing ist heutzutage in aller Munde. Es beschreibt die Verwendung einer
Technologie, welche große Berechnungen auf mehreren Computern in einem Netzwerk
verteilt. Der Begriff Cloud beschreibt demnach eine Farm von Computern, die sich zu einem
Cluster verbinden, was man sich wie eine Wolke vorstellen kann.
Bei dieser Technologie werden verschiedenen Komponenten
Speicherkapazitäten dynamisch im Netzwerk zur Verfügung gestellt.
wie
Rechen-
oder
Ein Aspekt des Cloud Computing ist die parallele Berechnung auf mehreren Computern in der
Cloud, worin ein erheblicher Geschwindigkeitsvorteil liegt
Ein Ansatz dafür bietet das MapReduce-Framework, welches in dieser Seminararbeit
beschrieben und anhand eine Beispiels näher erläutert wird. Desweiteren wird ein Vergleich
mit relationalen Mehrrechner-Datenbanksystemen gezogen und eine wichtige
Implementierung von MapReduce vorgestellt. [VBM]
2. Motivation
Heutzutage werden immer mehr Daten automatisch erfasst. Dies ist beispielsweise bei
Aktienkursen, Wetterdaten, Social Networks oder Log-Dateien der Fall. Dies erzeugt riesige
Datenmenge, dessen Verarbeitung sich als Herausforderung darstellt.
Zwar sind in den letzten Jahren die Speicherkapazitäten der Festplatten enorm angestiegen,
die Zugriffszeiten jedoch nicht in diesem Maße. Im Jahr 2000 betrug das durchschnittliche
Volumen von Festplatten um die 40 GB mit Zugriffszeiten von rund 32 MB pro Sekunde. Das
Auslesen einer solchen Platte dauerte demnach um die 21 Minuten. 2009 hingegen betrug die
mittlere Speicherkapazität von Festplatten 1000 GB, also das 25 fache im Vergleich zum Jahr
2000. Die Zugriffszeiten betrugen dabei 125 MB pro Sekunde, was nur ein 4 faches der
Zugriffszeiten im Vergleich zum Jahr 2000 darstellt. Demnach benötigte man 135 Minuten
zum Auslesen einer derartigen Festplatte. [WIKI]
Google gibt zu ihren Verfahren für das Durchsuchen des Webs folgende Beispielrechnung:
Im Jahr 20xx gibt es mehr als 1 Billion Websites, wobei jede eine Mindestgröße von 20 kB
hat. Das ergibt über 400 TB an zu bearbeitenden Daten. Würde ein Computer das Web
„lesen― bräuchte er mit einer Festplatten-Lesegeschwindigkeit von 30-35 MB pro Sekunde
rund 4 Monate. Würden allerdings 100.000 Computer diese Aufgabe übernehmen, so wär die
Arbeit in weniger als 2 Minuten getan. [CIR07]
Dies zeigt, dass das Bearbeiten von Daten im Computercluster viel weniger Zeit in Anspruch
nimmt, da die Daten parallel verarbeitet werden können, anstatt sequentiell mit einem
Computer.
-2-
Daher bewältigen Unternehmen wie Google große Datenmengen in Computerclustern durch
verteiltes paralleles Rechnen. Durch diese Methode werden mehrere Recheneinheiten mit
eigenen Festplatten zu einem sogenannten Cluster verbunden. Desweiteren werden die Daten
verteilt gespeichert, also genau auf dem Computer, der die Daten auch bearbeitet. [CIR07]
Durch dieses Verfahren soll sich eine deutliche Zeiteinsparung bei der Datenverarbeitung und
Zugriffsoperationen ergeben.
3. Das MapReduce Verfahren
3.1 Einführung
Um die bereits oben genannten Probleme zu bewältigen, entwickelte Goggle MapReduce, ein
Framework um nebenläufige Berechnungen auf Computerclustern durchzuführen. Es wurde
durch die Funktionen map und reduce inspiriert, welche in der funktionalen Programmierung
häufig verwendet werden. Allerdings weicht die Semantik bei MapReduce davon ab.
[LAE07]
Das MapReduce-Framework realisiert eine Funktion, welches aus einer Liste von Schlüssel/Werte-Paaren, welche die Eingabeliste darstellen, eine neue Liste von Schlüssel-/WertePaaren berechnet, die Ausgabeliste. Dabei teilt es die zu bearbeitenden Daten in kleine Teile,
die sogenannten Blöcke, auf. Diese werden anschließend zur gleichzeitigen Verarbeitung auf
unterschiedliche Rechner im Cluster verteilt. Daraus ergibt sich die parallele Verarbeitung der
Daten, was zu mehreren Teilergebnissen führt, welche für das Endergebnis wieder
zusammengeführt werden sollen, da der Nutzer ein komplettes Endergebnis der Berechnung
haben will und nicht mehrere kleine Teilergebnisse. [DG04]
Die darunterliegende Architektur und die Verteilung auf Computerclustern soll für den Nutzer
transparent sein, sodass er von der Datenaufteilung nichts mitbekommt und auch keinen
Einfluss darauf nehmen kann.
Das ganze Verfahren ist in mehrere Phasen aufgeteilt, welche im Folgenenden beschrieben
werden.
3.2 Definition
list(k1,v1)  list(k2,v4)
Die formale Definition der gesamten Transformation zeigt, dass die Eingabe aus einer Liste
von Schlüssel-/Werte-Paaren besteht, welche durch die Bearbeitung die Ausgabeliste, eine
neue Liste von Schlüssel-/Werte-Paaren, erstellt.
-3-
Dabei sind alle
Schlüssel vom gleichen Typ und alle
sind die entsprechenden Werte
vom gleichen Typ.
3.3 Map-Phase
Vor Beginn der MapReduce-Funktion, müssen die Eingabedaten, welche in semistrukturierter
Form vorliegen, umgewandelt werden.
semistrukt. Eingabedaten  list(k1,v1)
Dies geschieht durch eine sogenannte Input-Phase. Das Ergebnis dieser Phase ist eine Liste
von Schlüssel-/Werte-Paaren (SWPaaren), welche als Eingabe für die Map-Funktion, die eine
derartige Struktur als Eingabedaten verlangt, dient.
Liegt diese Liste vor, wird für jedes einzelne SWPaar die Map-Funktion aufgerufen.
(k1,v1) list(k2,v2)
Die Map-Funktion erzeugt aus jedem SWPaar eine Liste von SWPaaren, wobei jeder
Schlüssel in dieser Liste mehrmals vorkommen kann und genau einen Wert enthält.
Jede Map-Funktion ist unabhängig von den anderen und wird auf einen Computer im Cluster
aufgerufen. Das heißt, dass die SWPaare parallel und gleichzeitig bearbeitet werden.
3.4 Shuffle-Phase
Die Shuffle-Phase ist ein Teil der eigentlichen Map-Berechnung. Diese muss im Gegensatz
zur Map-Phase nicht für den jeweiligen Anwendungsfall programmiert werden, da sie
funktional stets die gleiche Aufgabe erledigt.
list(k2,v2)  (k2, list(v2))
-4-
Sie erstellt neue SWPaare, was durch Gruppierung der einzelnen Paare durch den Schlüssel
geschieht. Das heißt, dass alle Werte, welche ein und demselben Schlüssel enthalten, diesem
zugeordnet werden und am Ende dieser Phase jeder Schlüssel nur noch in einem SWPaar
vorkommt und die zugehörigen Werten enthält.
Das Ergebnis dieser Phase bildet das Zwischenergebnis, welches der Mapper in seinem
FileSystem speichert. Betrachtet man alle Map-Berechnungen, inklusiver der Shuffle-Phase,
so entstehen mehrere Zwischenergebnisse, welche jeweils auf dem Computer abgespeichert
werden, auf dem sie bearbeitet wurden.
3.5 Reduce-Phase
(k2, list(v2))  list(v3)
Die Reduce-Phase berechnet aus den Zwischenergebnissen der Map-Phase eine Liste von
Ergebniswerten.
Dabei wird für jedes Zwischenergebnis der Shuffle-Phase eine Reduce-Berechnung
unabhängig von den anderen durchgeführt. Dies ergibt wieder eine parallele Bearbeitung der
Zwischenergebnisse auf mehreren Computern im Cluster.
list(v3)  list(v2,k4)
Im Anschluss müssen die einzelnen Endergebnisse der Reduce-Berechnungen wieder zu
einen einheitlichen Endergebnis zusammengeführt werden. Dabei werden die jeweiligen
Werte der Endergebnisse mit ihren Schlüsseln gepaart und ausgegeben. [DG04]
-5-
3.6. Überblick
Abb. 1: MapReduce-Schema
In dem oben abgebildeten Schema sind nochmals alle Phasen der MapReduce-Berechnung
dargestellt.
Die Eingabedaten werden wie beschrieben in Blöcke aufgeteilt und für jeden Block wird die
Map-Berechnung inklusive der Shuffle-Phase durchgeführt. Jedes Zwischenergebnis wird im
Speicher abgelegt und zwar auf dem Computer, der Map-Berechnung durchgeführt hat.
Anschließend ist zu sehen, dass für jedes Zwischenergebnis die Reduce-Berechnung
durchgeführt wird, deren gesamte Ergebnisse als gemeinsames Endergebnis ausgegeben
werden.
-6-
3.7.
Funktionsweise und Fehlerbehandlung
Um eine MapReduce-Berechnung mit der oben beschriebenen Funktionsweise durchzuführen
müssen die ganzen Knoten, die bei der Ausführung dieser Berechnung beteiligt sind, in
irgendeiner Form gemanagt werden.
Dies geschieht, indem das Framework zu Beginn einen Computer als Master bestimmt. Dieser
ist für die Koordination der restlichen Computer und für die Datenverteilung verantwortlich.
Dabei teilt der Master den anderen Computern, welche Worker genannt werden, die
entsprechenden Map-Funktionen zu.
Während der Berechnung kommuniziert der Master ständig mit den Workern, indem er sie in
bestimmten Zeitintervallen anpingt. Dabei überprüft er die Erreichbarkeit der Worker und
bekommt in der Antwort jedes Computers den Berechnungsstatus mitgeteilt und die
Speicherorte der bearbeitenden Daten.
Der Master bestimmt ebenfalls, welche Computer die Reduce-Berechnungen übernehmen und
das noch während der Map-Berechnungen. [FIS10]
Während der Berechnungen kann es durchaus zu Fehlern kommen. Die kann ein Ausfall oder
Fehler in der Hardware eines Rechners oder ein Ausfall des gesamten Netzwerkes sein. In
beidem Fällen ist ein bestimmter Teil der Daten nicht erreichbar, da der betroffene Rechner
nicht antwortet.
Ist ein Worker ausgefallen, so bekommt dies der Master mit, da er jeden Worker periodisch
anpingt. Der Master teilt nun die Berechnung, die der ausgefallene Rechner durchgeführt hat,
einen anderen Worker zu. Somit ist sichergestellt, dass jede Berechnung terminiert.
Ist ein Worker bei einer Map-Berechnung ausgefallen, so muss die gesamte Berechnung neu
ausgeführt werden, auch wenn er schon beendet wurde. Dies ist notwendig, da noch nicht alle
Reduce-Berechnungen vom Map-Worker gelesen haben.
Ist jedoch ein Worker bei einer beendeten Reduce-Berechnung ausgefallen, so muss diese
Berechnung nicht neu durchgeführt werden, da die Ergebnisse dieser Berechnungen
redundant im FileSystem gesichert sind. [FIS10]
4. Beispiel
In diesem Kapitel wird ein Beispiel für die beschriebene Funktionsweise von MapReduce
erklärt und vereinfacht dargestellt, welches den jeweiligen Maximalverbrauch eines PKW bei
mehreren Testfahrten bestimmt.
Die zu bearbeitenden Daten liefert ein System, welches neben den Verbrauchsdaten, die in
einem bestimmten Intervall aufgezeichnet werden, auch mehrere Metadaten enthält
(Testfahrtnummer, FahrerID, usw.).
-7-
Wie MapReduce das Verbrauchsmaximum der ermittelten Daten bestimmt, wird im
Folgenden dargestellt.
1
6
input
output
shuffle
map
2
3
reduce
4
5
Abb. 2: Verarbeitung exemplarischer Verbrauchsdaten eines PKW mittels MapReduce
Als Eingabe dienen in diesem Fall unstrukturierte Verbrauchsdaten (Abb. 2, Feld 1), welche
bei den Testfahrten des Fahrzeuges ermittelt wurden. Diese enthalten aller
Verbrauchsangaben in 3-stelliger Form (bspw. steht 074 für einen Verbrauch von 7,4l)
inklusiver der Uhrzeit, welche in bestimmten Zeitintervallen aufgezeichnet wurde und
wichtige Metadaten wie die Nummer der Testfahrt, die Nummer des Testfahrers usw.
Die Input-Phase extrahiert aus dieser Eingabe die benötigten Daten, anhand des Byte-Offset
(in diesem Fall die Testfahrtnummer, welche hier die ersten 3 Stellen sind). Der Schlüssel in
den SWPaaren gibt jeweils die Nummer der Testfahrt an (Abb. 2, Feld 2).
Anschließend beginnt die Map-Berechnung, welche aus den SWPaaren der Eingabe derartige
neue SWPaare berechnet, die als Wert jeweils eine dreistellige Verbrauchsangabe enthalten
(Abb. 2, Feld 3).
Direkt im Anschluss wird für jedes berechnete Paar der Map-Phase die Shuffle-Berechnung
durchgeführt, welche jeder einzelnen Testfahrt eine Liste von allen Verbrauchsangaben
zuordnet (Abb. 2, Feld 4).
Diese SWPaare dienen als Zwischenergebnisse.
Liegen alle Zwischenergebnisse vor, so wird für jedes einzelne die Reduce-Berechnung
durchgeführt. Diese ermittelt in unseren Fall die jeweiligen Verbrauchsmaxima der einzelnen
Testfahrten. Die Ergebnislisten enthalten in unserem Fall demnach nur einen einzelnen Wert
(Abb. 2, Feld 5).
-8-
Im Anschluss daran ordnet die Output-Phase jedem Verbrauchsmaxima den Schlüssel zu, mit
dem der jeweilige Reduce-Task aufgerufen wird. In unserem Fall ist das die
Testfahrtnummer.
Die Ergebnisse dieser Phase werden als Endergebnisse ausgegeben und man bekommt das
jeweilige Verbrauchsmaxima zu jeder einzelnen Testfahrt zurückgeliefert (Abb. 2, Feld 6).
5. Vergleich mit relationalen Mehrrechnerdatenbanken
Dieses Kapitel stellt einen Vergleich von MapReduce und relationalen
Mehrrechnerdatenbanken auf und erörtert die Vor- und Nachteile beider Systeme.
Da MapReduce auf die Bearbeitung in Computerclustern setzt, muss man sie relationalen
Mehrrechnerdatenbanken gegenüberstellen.
Dafür gibt es 3 verschiedene Architekturen:
 Shared Everything – alle Recheneinheiten nutzen einen gemeinsamen Speicher und
einen gemeinsamen Multiprozessor
 Shared-Disk – jede Recheneinheit hat einen eigenen Multiprozessor, aber alle nutzen
einen gemeinsamen Speicher
 Shared-Nothing – jede Recheneinheit hat einen eigenen Multiprozessor und einen
eigenen Speicher
Allerdings kommen für relationale Mehrrechner-Datenbanksysteme in der Regel
ausschließlich High-End-Server zum Einsatz, welche hohe Kosten verursachen. Dabei wird
meist die Shared-Disk-Architektur genutzt, teilweise aber auch die Shared-NothingArchitektur unterstützt.
Desweiteren arbeiten solche Datenbanksysteme mit einer horizontalen Partitionierung auf
mehrere Speicher oder Partitionen. Deshalb müssen die Anfragen partitioniert werden, deren
Ergebnisse anschließend wieder zusammengeführt werden müssen, um ein Gesamtergebnis
zu erhalten.
Bei MapReduce hingegen werden die Daten in Blöcke aufgeteilt, was mit dem SharedNothing-Prinzip vergleichbar ist.
Die Struktur bei relationalen Mehrrechner-Datenbanksystemen (MDBs) ist statisch, sodass sie
bei Punktabfragen und Änderungsoperationen via SQL einen Vorteil haben. MapReduce
hingegen bietet ausschließlich Abfragen. Modifikationen der Daten geschieht durch
darunterliegende Strukturen wie beispielsweise dem FileSystem. Allerdings liegt MapReduce
vorn, wenn das Schema semistrukturiert ist.
Treten bei der Datenverarbeitung Fehler auf, so muss bei relationalen MDBs ein QueryRestart durchgeführt werden.
Bei MapReduce wird der Task, der durch einen Rechnerausfall nicht durchgeführt werden
kann, durch oben beschriebene Funktionsweise auf einen anderen Rechner übergeben, der
-9-
diesen Task übernimmt und dessen Daten bearbeitet, wodurch MapReduce einen enormen
Geschwindigkeitsvorteil bei dieser Art der Fehlertoleranz besitzt.
Die Umgebung bei relationalen MDBs ist homogen, da in der Regel High-End-Hardware in
den Servern eingesetzt werden muss, welche hohe Kosten verursachen. Desweiteren ist das
DBMS teuer, die Installation und die Konfiguration solcher Systeme komplex, zeit- und damit
kostenintensiv.
MapReduce hingegen ist auf den Einsatz von Standardhardware optimiert und es kann auf
OpenSource-Software zurückgegriffen werden, sodass die Kosten für dieses System gering
sind.
Die eben beschriebene Gegenüberstellung beider Systeme soll die folgende Tabelle nochmal
veranschaulichen.
Tabelle 3: Vergleich von MapReduce und relationalen Mehrrechner-Datenbanksystemen
Relationale MDBs haben demnach ihre Stärken bei Abfrage- und Änderungsoperationen via
SQL, statischem Schemata sowie in ihrer Ausgereiftheit.
MapReduce ist für das parallele Verarbeiten enormer Datenmengen geeignet, hat Vorteile in
der Struktur, da es eine große Anzahl von semistrukturierten Daten gibt und bei den Kosten.
Desweiteren ist es auch schnell aufsetzbar, da, wenn die Hardware-Infrastruktur vorliegt, es
ausschließlich von Nöten ist, die Funktionen für MapReduce zu programmieren. [STO10]
Allerdings soll MapReduce keine generelle Alternative zu relationalen MDBs sein, sondern
nur in speziellen Bereichen wie beispielsweise der Bearbeitung semistrukturierter Daten.
- 10 -
6. Hadoop
Für MapReduce gibt es bereits einige Implementierungen, wobei Hadoop womöglich die
Bedeutendste darstellt.
Hadoop ist ein OpenSource-Java-Framework für skalierbare, verteilt arbeitende
Datenverarbeitungssysteme. Es basiert auf dem Algorithmus von Googles MapReduce und
des Google-FileSystem, da dieses hohen Datenvolumen gerecht wird und sich neue Knoten
leicht hinzufügen lassen. [FIS10]
Dies ermöglicht riesige Rechenprozesse mit Petabytes an Daten auf Computerclustern, da die
Verarbeitung der Daten parallel auf mehreren Computern durchgeführt werden kann.
Die Grundlage für Hadoop legte Doug Cutting, indem er MapReduce 2005 für die
Suchmaschine der OpenSource-Community Nutch* implementierte. Im Jahr 2006 startete
Hadoop als Lucene-Projekt und es wurde am 28. Januar 2008 zum Apache Top-Level-Projekt
ernannt. Mittlerweile beherbergt es mehrere Subprojekte.
Im Juli 2009 gewann ein Cluster des Hadoop-Framework den Terabyte-Sort-Benchmark,
welcher ermittelt, welches System bestimmte Eingabedaten am schnellsten sortiert und
speichert. Dies war eine große Besonderheit, das Hadoop sowohl das erste OpenSourceProgramm, als auch das erste Java-Framework war, das diesen Test gewann.
Nutzer, welche Hadoop im großen Maße einsetzen, sind u.a. yahoo!, Amazon, facebook und
last.fm. Beispielsweise arbeitet yahoo!‗s größte Installation mit 4000 Knoten.
Hadoop besteht im Wesentlichen aus 3 Komponenten:
 Hadoop Common
 Hadoop Distributed FileSystem
 Hadoop MapReduce
Mit diesen 3 Komponenten lässt sich ein vollständiger Hadoop-Cluster aufbauen, welcher
nach dem Master-Slave-Prinzip arbeitet.
Hadoop Common stellt sämtliche Grundfunktionen bereit, die alle anderen Komponenten
benötigen, wie eine implementierungsneutrale FileSystem-Schnittstelle oder eine Schnittstelle
für die „Remote-Procedure-Call―-Kommunikation im Cluster und Bibliotheken.
Das Hadoop Distributed FileSystem (HDFS) ist das primäre Dateisystem von Hadoop und es
folgt dem Vorbild des Google-FileSystem. Es ist speziell für die Entwicklung von
MapReduce-Anwendungen optimiert.
Hadoop MapReduce bietet alle Funktionen um nach dem Programmiermodell zu entwickeln
und es basiert auf dem oben beschriebenen Google-MapReduce-Verfahren und dessen
Funktionsweise. [FIS10] [BAL 09]
___________________________________________________________________________
* Suchmaschinen-Projekt der OPenSource-Community
- 11 -
7. HadoopDB
HadoopDB ist ein freies paralleles Datenbanksystem, welches auf der Shared-NothingArchitektur basiert und das mit einer an SQL angelehnten Sprache abgefragt werden kann. Es
soll die Skalierbarkeit von Hadoop mit der Geschwindigkeit eines parallelen
Datenbanksystems kombinieren.
HadoopDB basiert auf einer Verbindung von PostgreSQL, Hadoop und einem Interface, das
Anfragen in MapReduce oder SQL verarbeitet, je nachdem, welche Art von Anfragen
vorliegen. Es generiert Anfragepläne, welche über einen Shared-Nothing-Cluster ausgeführt
werden. Aus diesem Grund ist HadoopDB ein Hybrid aus MapReduce und einem parallelen
Datenbanksystem. [GOLEM]
Das derzeit genutzte Datenbanksystem ist PostgreSQL und es soll gegen andere
Datenbanksysteme austauschbar sein, was mit MySQL schon erfolgreich durchgeführt wurde.
Desweiteren ist HadoopDB OpenSource. [YALE]
8. Zusammenfassung
Zusammenfassend ist zu sagen, dass durch das MapReduce-Framework Berechnungen und
eingelesene Daten auf vergleichsweise einfache und durch Standardhardware sowie
OpenSource-Software kostengünstige Art und Weise durchgeführt und weiterverarbeitet
werden können.
Der Geschwindigkeitsvorteil von MapReduce besteht darin, dass die Daten parallel auf
mehreren Computern im Cluster verarbeitet und gespeichert werden.
Es gibt bereits einige Implementierungen des MapReduce-Frameworks, sowie
Hybridlösungen, welche die Vorteile der MapReduce-Berechnung und relationalen
Mehrrechner-Datenbanksystemen nutzen.
Das MapReduce-Framework wird bereits von vielen Firmen erfolgreich genutzt und findet
immer höheren Zuspruch, da es schnell und kostengünstig aufsetzbar ist.
- 12 -
9. Literaturverzeichnis
[DG04]
Jerref Dean, Sanjay Ghemawat, ―MapReduce: Simplified Data Processing on
Large Clusters‖, Google Inc., 2004
[STO10]
Michael Stonebraker, ―MapReduce and Parallel DBMSs: Friends or Foes?‖,
Communication of the ACM, Januar 2010
[CIR07]
Walfredo Cirne, ―Google Infrastructure for Massive Parallel Processing‖,
Google Inc., 2007
[FIS10]
Oliver Fischer, ―Verarbeiten großer verteilter Datenmengen mit Hadoop‖,
Heise Zeitschriften Verlag, 2010
[BAL09]
Eric Baldeschwieler, „Hadoop Updaten, Open Cirrus Summit―, yahoo!, 2009
[LAE07]
Ralf Lämmel, ―Google‘s MapReduce Programming Model—Revisited‖,
Microsoft Corp., 2007
[YALE]
http://db.cs.yale.edu/hadoopdb/hadoopdb.html, Abrufdatum: 05.06.2010
[VBM]
http://www.vb-magazin.de/KnowledgeBase/articles/2009/09/11/272-einfuuml-hrung-in-die-cloud-computing-technologie-microsoft-azure.aspx,
Abrufdatum: 05.06.2010
[WIKI]
http://de.wikipedia.org/wiki/Festplatte, Abrufdatum: 05.06.2010
[GOLEM]
http://www.golem.de/0907/68643.html, Abrufdatum: 05.06.2010
- 13 -
Herunterladen