MapReduce & Apache HadoopParalleles Rechnen in Clustern
Oliver [email protected]
Technische Universität Berlin22. Januar 2010
Folie 2
Inhalt
MapReduce & Apache Hadoop
EinführungMapReduce
GrundlagenFunktionsweiseBeispieleZusammenfassung
Apache HadoopGeschichteArchitekturMapReduce-Anwendungen mit HadoopBeispieleZusammenfassung
FazitQuellen
MapReduce
Programmiermodell zur parallelen Verarbeitung von großen DatenständenGrundlagen∙ Funktionsweise ∙ Beispiele
Folie 4
MapReduce vorgestellt
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Was ist und kann MapReduce?
• Programmiermodell zur Verarbeitung und Erzeugung von großen Datenbeständen
• Ausgelegt für die parallele Verarbeitung von Datenbeständen in großen Clustern auf Standardhardware
• Auslegung auf hohe Fehlertoleranz
Woher kommt MapReduce?
• Entwickelt durch Google zur Verarbeitung von Rohdaten
• Inspiriert duch Lisp und dessen Funktionen map und reduce
Folie 5
map und reduce in Lisp
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
map-Funktion – Abbildung zwischen Listen
• Eingabe ist eine Sequenz von Werten und eine Funktion
• Übergebene Funktion verarbeitet sequentiell alle Werte
• Ergebnis der übergebenen Funktion wird durch map ebenfalls als Sequenz zurückgegeben
reduce-Funktion – Zusammenfassung von Listen
• Eingabe ist eine Sequenz von Werten und eine binäre Funktion
• Binäre Funktion verbindet alle Werte der Eingabesequenz
• Ergebnis ist ein einfacher Wert
Folie 6
Notizen zu MapReduce
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Grundannahme von MapReduce
Die Datenübertragungsrate (network bandwidth) ist die begrenzende Ressource in Clustern. Es ist effizienter die Berechnung zu den Daten zu bringen.
Was ist neu anders?
Klassischer Ansatz: Daten zum Programm
Was man vorher wissen sollte
• Google nutzt für MapReduce-Anwendungen ein verteiltes Dateisystem (Google File System)
• Worker führen auf Map- und Reduce-Funktionen verteilt im Cluster aus
• Zentraler Master koordiniert Ausführung
Folie 7
MapReduce als Programmiermodell allgemein
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Programmiermodell von MapReduce
• Map-Phase und Reduce-Phase
• Parallelisierung durch Phasen
• Jede Phase wird parallel ausgeführt
• Eingabedaten auf verschiedene Rechnern
• Voraussetzung ist Partitionierbarkeit
Beispiele
• Zähle alle Wörter in einem Text
• Zähle alle Referer im Logfile
Folie 8
Map-Phase von MapReduce
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Aufgabe
• Verarbeitung von Eingabedaten und Erzeugung von Zwischenwerten
Signaturmap(k1,v1) → list(k2,v2)
Funktionsweise
• Eingabe ist Schlüssel-Wert-Paar
• Ausgabe beliebig vieler intermediate key/value pairs
• Map-Funktion wird vom Anwender implementiert
Beispielmap(String key, String value):
// key: document name,
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");
Folie 9
Reduce-Phase von MapReduce
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Aufgabe
• Zusammenfassung der Zwischenergebnisse, Bereitstellung des Endergebnisses
Signaturreduce(k2,list(v2)) → list(v2)
Reduce-Phase
• Eingabe ist Schlüssel und Werte-Menge zu diesem Schlüssel
• Ausgabe von Reduce meistens null oder ein Wert
Beispielreduce(String key, Iterator values):
// key: a word, values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
Folie 10
MapReduce als Programmiermodell schematisch
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Eingabedateien
Ei
ng
ab
e
Split 0
Split 1
Split 2
Split 3
Split 4
Split 5
Split 6
Split 7
Ergebnisse
File
FileWorkerreduce-Funktion
Reduce-Phase
Workerreduce-Funktion
Zwischen-ergebnisse
File
File
File
File
File
File
Map-Phase
Workermap-Funktion
Workermap-Funktion
Workermap-Funktion
Folie 11
MapReduce-Beispiel
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele
Eingabedateien
Arm
e h
aben
Arm
e. A
rme
hab
en B
ein
e. B
ein
e h
aben
ke
ine
Arm
e. A
rme
Bei
ne!
Arme haben Arme. Arme haben Beine.
Beine haben keine Arme. Arme Beine!
Ergebnisse
Workerreduce-Funktion
Reduce-PhaseZwischen-ergebnisse
Arme 3Beine 1haben 2
Map-Phase
Workermap-Funktion
Workermap-Funktion
Aufgabe: Zähle die Wortvorkommen im folgenden Text: „Arme haben Arme. Arme haben Beine. Beine haben keine Arme. Arme Beine!“
Arme 2Beine 2haben 1Keine 1
Arme 5Beine 3haben 3keine 1
Folie 12
Zusammenfassung zur MapReduce
MapReduce & Apache Hadoop
Grundlagen ∙ Funktionsweise ∙ Beispiele ∙ Zusammenfassung
Zusammenfassung
• Wurzeln von MapReduce in funktionaler Programmierung
• MapReduce ist ein Programmiermodel, kein Algorithmus
• Zwei-Phasen-Modell: Map und Reduce
• Auslegung auf möglichst hohe Parallelität bei Verarbeitung
• Neuer Ansatz: Berechnung findet bei den Daten statt, nicht Daten kommen zur Berechung
• Anwendbar bei allen Problemen mit partitionierbaren Eingaberaum
• Je kleiner mögliche Partitionen, desto höher erreichbare Parallelität
Apache Hadoop
Freies Framework für MapReduce-AnwendungenGeschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele
Folie 14
Geschichte von Apache Hadoop
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Entstehungsgeschichte von Apache Hadoop
• Februar 2003: erste Google-interne MapReduce-Implementierung
• Oktober 2003: The Google Filesystem veröffentlicht
• Dezember 2004, MapReduce: Simplifed Data Processing on Large Clusters veröffentlicht
• 2005: Erste Implementierung im Suchmaschinen-Framework Nutch der Apache Software Foundation(Doug Cutting)
• Februar 2006: Hadoop wird Subprojekt bei Apache Lucene
• 2008: Hadoop wird Apache Top-Level-Projekt
• 2009: Hadoop wird in Subprojekte aufgeteilt und neue Projekte auf Hadoop-Basis entstehen
• Juli 2009: Ein Hadoop-Cluster gewinnt den Terabyte Sort Benchmark
Folie 15
Komponenten von Apache Hadoop
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Hadoop Distributed File System
• Verteiltes Dateisystem nach den Vorbild des Google File Systems
• Verteilung der Daten im Hadoop-Cluster
• Kernkomponenten sind NameNode und DataNodes
MapReduce
• Framework zur Entwicklung von Anwendungen nach dem MapReduce-Programmiermodell
• Kernkompenten sind der JobTracker und TaskTracker
Folie 16
Das Hadoop Distributed File System (HDFS)
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Eigenschaften
• Verteiltes Dateisystem, designt unter der Annahme, das Hardwareausfälle normal sind
• Kapazität bis in den Petabyte-Bereich
• Grundnahme: Daten einmal geschrieben, oft gelesen, aber nicht mehr verändert
• Blockorientiert, Dateien werden in Blöcke aufgeteilt, welche im Cluster verteilt werden
• Datensicherheit durch Blockreplikation
• Komponenten sind NameNode, SecondaryNameNode und DataNodes
Folie 17
Komponenten des HDFS: NameNode und SecondaryNameNode
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
NameNode
• Verwaltet die Metadaten des HDFS
• Koordiniert die Verteilung von Dateien im HDFS
• Stellt nur Metadaten zur Verfügung, kein Datentransfer
• Regelt den Zugriff von Clients auf die Dateien im FileSystem
• Überwacht das HDFS auf Ausfälle von Nodes
SecondaryNameNode
• Backupt die Änderungen seit dem letzten Start des HDFS an den HDFS-Metadaten
Folie 18
Komponenten des HDFS: DataNode
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
DataNode
• Verwaltet Blöcke der Dateien auf den Clusternodes
• Ein DataNode pro Clusternode
• Meldet seinen Zustand per Heartbeat an den NameNode
• Zuständig für den Datentransfer der Blöcke zu anderen DateNodes und zu anfragenden Clients
Folie 19
Das MapReduce-Framework von Hadoop
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Eigenschaften
• MapReduce-Programmiermodel
• Grundfunktionalität abgedeckt
• Entwickler stellt Map- und Reduce-Funktion
• Grundfunktionalität über eigene Implementierungen änderbar
• MapReduce-Anwendung wird als Job bezeichnet
• Kernkomponenten sind der JobTracker und der TaskTracker
Folie 20
JobTracker und TaskTracker
JobTracker
• Verteilt Map-Tasks und Reduce-Tasks auf Cluster-Nodes
• Steuert die Ausführung der Jobs im Cluster
• Überwacht die Ausführung der Tasks und startet ggf. Tasks neu
• Pro Cluster nur ein JobTracker
TaskTracker
• Führt Map- oder Reduce-Task lokal auf einem Node im Cluster aus
• Sendet Statusinformationen an JobTracker
• Beliebig viele TaskTracker möglich
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Folie 21
Beispiel-Mini-Hadoop-Cluster
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
zeus.hadoop : S erver
: JobTrack er
: Name Node
: Se condaryName Node
sl03.hadoop : Server
: TaskTracke r
: Data Node
sl01.hadoop : Server
: TaskTracke r
: Data Node
sl04.hadoop : Server
: Data Node
: TaskTracke r
sl02.hadoop : Server
: Data Node
: TaskTracke r
«flow »«flow »
«flow »
«flow »
«flow »
«flow » «flow »
«flow »
«flow »
Ein Mini-Cluster mit fünf Knoten
Folie 22
MapReduce-Anwendungen mit Hadoop
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Allgemeines
• Hadoop stellt komplettes Framework für MR-Anwendung bereit
• Funktionsweise im Wesentlichen analog zu Googles MapReduce-Programmiermodell
• Entwickler kann sich auf Map- und Reduce-Funktion beschränken
• Entwickler kann durch eigene Implementierungen Hadoop-Verhalten ändern
• Ausführung von Jobs erfolgt sequentiell (Standardverhalten)
Folie 23
Zuständigkeiten in einem MapReduce-Job
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Job Configuration
Input Format
Input Location
Mapper
Anzahl der Reducer
Partitioner
Reducer
Output Key Type
Output Key Value
Output Format
Output Location
Quelle: Nach Venner
Input Splitting & Distribution
Start of Map Tasks
Shuffle, Partition/Sort per Map Output
Merge Sort for Map Outputs for each
Reduce Task
Start of Reduce Tasks
Collection of Final Output
Benutzer Hadoop-Framework
Format und Ort der Eingabe
Map-Funktion
Zuordnung der Mapper-Ausgabe zu Reducer-Task
Reducer-Funktion
Ausgabetyp der Map-Funktion
Format und Ort der Ausgabe
Eingabe lesen; Aufteilung in Splits
Verarbeitung der Splits (einer pro Task)
Zusammenfassung der Ergebnisse einer Partition
Ausgabe der Ergebnisse
Sortierung Map-Ausgabe; Partitionierung für Reducer
Zusammenfügen der Map-Partitionen für jeden Reducer
Folie 24
Zuständigkeiten in einem MapReduce-Job
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Eingabedateien
Ei
ng
ab
e
Split 0
Split 1
Split 2
Split 3
Split 4
Split 5
Split 6
Split 7
Ergebnisse
File
FileWorkerreduce-Funktion
Reduce-Phase
Workerreduce-Funktion
Zwischen-ergebnisse
File
File
File
File
File
File
Map-Phase
Workermap-Funktion
Workermap-Funktion
Workermap-Funktion
Mapper.class
Partitioner.class
Reducer.class
Framework Framework
Folie 25
Erstellung einer MapReduce-Anwendung
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
MapReduce-Anwendungen schreiben
• Zentrale Framework-Klassen sind Job und Configuration
• Job stellt die „Sicht des Ausführenden auf den Job“ dar
• Über Job-Klasse legt Entwickler fest:• Eingabe- und Ausgabeformate
• Implementierung der Map- und Reduce-Funktion
• Anzahl der Reducer
• Partionierungsfunktion
• Configuration dient zur Übergabe von Ressourcen an den Job
• Anwendung selber normale Klasse mit main()-Methode
• Anwendung wird über Shell-Skript an Hadoop übergeben
Folie 26
Beispielanwendung: Logfile-Sortierung
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Anwendungsszenario (etwas konstruiert…)
• Eine Anwendung läuft verteilt auf unterschiedlichen Servern
• Anwendung setzt Geschäftsprozesse um
• Einzelne Schritte eines Geschäftsprozesses können auf unterschiedlichen Servern ausgeführt werden
• Jeder Prozesschritt wird in ein lokales Logfile geschrieben
• Regelmäßig müssen alles Schritte eines Prozesses zusammengesuchtwerden, um die Prozesse analysieren zu können
• Problem: Logfile-Einträge sind auf unterschiedliche Files aufgeteilt und da wir natürlich sehr erfolgreich sind, sind unsere Logfiles riesig…
Folie 27
LogFileSorter – Der Mapper
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Input Format erzeugt Eingabe-Schlüssel und -Werte(Klasse TextInputFormat übergibt Zeilennummer als Key und die Zeile selbst als Value)
Standard-Implementierung als Identitätsfunktionprotected void map(KEYIN key, VALUEIN value,
Context context) throws IOException, InterruptedException {
context.write((KEYOUT) key, (VALUEOUT) value);
}
Mapper für die Logfile-Sortierungpublic class LFSMapperSort
extends Mapper<LongWritable, Text, LFSBPKey, Text> {
private LFSBPKey bpKey = new LFSBPKey();
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException
{
String logLine = value.toString();
int firstBlank = logLine.indexOf(" ");
int firstSlash = logLine.indexOf("/");
String bpidAsString = logLine.substring(3, firstSlash);
String step = logLine.substring(firstSlash + 1, firstBlank);
bpKey.set(Integer.valueOf(bpidAsString), Integer.valueOf(step));
context.write(bpKey, value);
}
}
Ermittlung der Business Process ID und des Schritts
Erzeugung des Keys für die AusgabeKey vom Framework für Sortierung vor derReduce-Phase benutztAusgabe von erzeugtem Schlüssel und Wert
Folie 28
LogFileSorter – Der Reducer
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Standard-Implementierung als Identitätsfunktionprotected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context)
throws IOException, InterruptedException {
for (VALUEIN value: values) {
context.write((KEYOUT) key, (VALUEOUT) value);
}
}
Reducer für die Logfile-Sortierungpublic class LFSReducer
extends Reducer<LFSBPKey, Text, Text, Text> {
protected void reduce(LFSBPKey key, Iterable<Text> values, Context context)
throws IOException, InterruptedException
{
for (Text value: values) {
context.write(null, value);
}
}
}
Eingabe: vom Mapper erzeugte Schlüssel und alle Werte zum gleichen Schlüssel
Key wird verworfenAusgabe nur eigentliche Logzeile
Reducer arbeitet immer auf allen Werten eines Schlüssels
Folie 29
LogFileSorter – Der Job
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
public class LogFileSorter {
public static void main(String[] args)
throws IOException, ClassNotFoundException, InterruptedException
{
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
Job job = new Job(conf, LogFileSearch.class.getSimpleName());
job.setJarByClass(LogFileSearch.class);
job.setInputFormatClass(TextInputFormat.class);
job.setMapperClass(LFSMapperSearch.class);
job.setOutputKeyClass(LFSBPKey.class);
job.setOutputValueClass(Text.class);
job.setPartitionerClass(LFSBPPartioner.class);
job.setReducerClass(LFSReducer.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileInputFormat.setInputPathFilter(job, LFSPathFilter.class);
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Konfiguration der Job-Eingabe und der Job-Ausgabe
Konfiguration des Jobs (Zuweisung der Zuständigkeiten)
Auswertung der Befe
Folie 30
Zusammenfassung zur Apache Hadoop
MapReduce & Apache Hadoop
Geschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele ∙ Zusammenfassung
Zusammenfassung
• Vollständiges Framework für MapReduce-Anwendungen
• Führendes freies MapReduce-Framework
• Anpassbar durch Austausch von Komponenten durch eigene Implementierungen
• Basis für viele Hadoop-Subprojekte
• Praxis-Einsatz bei Yahoo!, Facebook, last.fm
Folie 31
Fazit
MapReduce & Apache Hadoop
Fazit zu MapReduce
• MapReduce ist ein Programmiermodell für parallele Datenverarbeitung in Rechnerclustern
• Sehr gut geeignet für Probleme die sich partitionieren lassen
• Nicht für alle Probleme (z.B. Wettersimulation)
Fazit zu Apache Hadoop
• Apache Hadoop stellt kompletes MapReduce-Framework frei zur Verfügung
• Erfolg von MapReduce und Apache Hadoop durch Komplexitätsreduktion (z.B. durch Akzeptanz von Ausfällen im System)
Folie 32
Quellen
MapReduce & Apache Hadoop
Verwendete Quellen
• Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung. The Google Filesystem. In: ACM SIGOPS Operating Systems Review, Volume 37, Issue 5, December 2003, ISSN 0163-5980, Seiten 29-43, ACM, New York, NY, USA
• Jeffrey Dean, Sanjay Ghemawat. MapReduce: simplied data processing on large clusters. In: Communications of the ACM, Volume 51, Issue 1, Januar 2008, ISSN 0001-0782, Seiten 107-113, ACM, New York, NY, USA
• Jason Venner. Pro Hadoop, Build scalable, distributed applications in the cloud. ISBN 978-1-4302-1942-2, Apress, 2009
• Webseite des Hadoop-Projekts (http://hadoop.apache.org)
• Source-Code des Hadoop-Projekts