Top Banner
MapReduce & Apache Hadoop Paralleles Rechnen in Clustern Oliver Fischer [email protected] Technische Universität Berlin 22. Januar 2010
32

MapReduce & Apache Hadoop

May 07, 2015

Download

Technology

Oliver Fischer

Einführungsvortrag in das MapReduce-Programmiermodell und Apache Hadoop an der TU Berlin am 22. Januar 2010
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MapReduce & Apache Hadoop

MapReduce & Apache HadoopParalleles Rechnen in Clustern

Oliver [email protected]

Technische Universität Berlin22. Januar 2010

Page 2: MapReduce & Apache Hadoop

Folie 2

Inhalt

MapReduce & Apache Hadoop

EinführungMapReduce

GrundlagenFunktionsweiseBeispieleZusammenfassung

Apache HadoopGeschichteArchitekturMapReduce-Anwendungen mit HadoopBeispieleZusammenfassung

FazitQuellen

Page 3: MapReduce & Apache Hadoop

MapReduce

Programmiermodell zur parallelen Verarbeitung von großen DatenständenGrundlagen∙ Funktionsweise ∙ Beispiele

Page 4: MapReduce & Apache Hadoop

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

Page 5: MapReduce & Apache Hadoop

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

Page 6: MapReduce & Apache Hadoop

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

Page 7: MapReduce & Apache Hadoop

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

Page 8: MapReduce & Apache Hadoop

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");

Page 9: MapReduce & Apache Hadoop

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));

Page 10: MapReduce & Apache Hadoop

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

Page 11: MapReduce & Apache Hadoop

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

Page 12: MapReduce & Apache Hadoop

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

Page 13: MapReduce & Apache Hadoop

Apache Hadoop

Freies Framework für MapReduce-AnwendungenGeschichte ∙ Architektur ∙ MapReduce-Anwendungen ∙ Beispiele

Page 14: MapReduce & Apache Hadoop

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

Page 15: MapReduce & Apache Hadoop

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

Page 16: MapReduce & Apache Hadoop

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

Page 17: MapReduce & Apache Hadoop

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

Page 18: MapReduce & Apache Hadoop

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

Page 19: MapReduce & Apache Hadoop

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

Page 20: MapReduce & Apache Hadoop

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

Page 21: MapReduce & Apache Hadoop

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

Page 22: MapReduce & Apache Hadoop

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)

Page 23: MapReduce & Apache Hadoop

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

Page 24: MapReduce & Apache Hadoop

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

Page 25: MapReduce & Apache Hadoop

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

Page 26: MapReduce & Apache Hadoop

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…

Page 27: MapReduce & Apache Hadoop

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

Page 28: MapReduce & Apache Hadoop

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

Page 29: MapReduce & Apache Hadoop

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

Page 30: MapReduce & Apache Hadoop

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

Page 31: MapReduce & Apache Hadoop

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)

Page 32: MapReduce & Apache Hadoop

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