Reduce Programming Model. Architektur von Datenbanksystemen II

2. Map/Reduce Programming Model Architektur von Datenbanksystemen II Motivation  PROBLEMSTELLUNG § Unternehmen wie Google, Yahoo, Facebook und Twitt...
Author: Mona Simen
2 downloads 0 Views 2MB Size
2. Map/Reduce Programming Model Architektur von Datenbanksystemen II

Motivation  PROBLEMSTELLUNG § Unternehmen wie Google, Yahoo, Facebook und Twitter müssen täglich Datenmengen im Bereich von TB und PB speichern und verarbeiten § Daten sind zu groß, um sie auf einer einzigen Maschine sequentiell zu bearbeiten § Darum: Die Verarbeitung großer Datenmengen geschieht heute häufig mit verteilten Rechnern in Clustern § Es existieren 2 grundlegende Aufgabenbereiche: - Die Daten müssen möglichst effizient gespeichert werden - Die Daten müssen möglichst effizient verarbeitet werden

2

Datenspeicherung und -verarbeitung  DATENSPEICHERUNG § zur effizienten Datenspeicherung entwickelte Google das verteilte-Dateisystem Google File System (GFS) - GFS arbeitet nach dem Master-Slave-Prinzip - Fehlertoleranz bei Hardwareausfällen erreicht GFS durch Replikation - http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf

 DATENVERARBEITUNG § Das Standardvorgehen bei verteilten Systemen ist üblicherweise: Es findet ein Transfer der zu verarbeitenden Daten zum Programm statt - Ein Programm startet auf einem Rechner und holt die benötigten Eingabedaten von einer Quelle (z.B. FTP-Server oder Datenbank) - Dieses Vorgehen ist bei großen Datenmengen wegen des Datentransfers ein Flaschenhals und somit nicht optimal - Lösung: Die Datenverarbeitung muss dort stattfinden, wo die Daten gespeichert sind à Das ist mit dem Map/Reduce-Programmiermodell möglich

3

p

Zwei Bedeutungen von Map/Reduce Hadoop - Komponenten und Erweiterungen

deutungen von MapReduce  MAP/REDUCE-PROGRAMMIERMODELL

§ Fürsind die parallele pReduce h¨aufig Datenverarbeitung 2 Dinge gemeintin Clustern

apReduce-Programmiermodell Fu ¨r die parallele Datenverarbeitung in Clustern

 MAP/REDUCE-FRAMEWORK § Arbeiten nach dem Map/ReduceProgrammiermodell § Unterscheiden sich durch die Wahl der Programmiersprache und in den Implementierungsdetails

apReduce-Frameworks (z.B. Hadoop) Arbeiten nach dem MapReduce-Programmiermodell Unterscheiden sich durch die Wahl der Programmiersprache und in den Implementierungsdetails

4

MapReduce-Programmiermodell Ansatz  ZIEL § Verstecke Komplexität der parallelen Programmierung, Datenverteilung, Fehlertoleranz vor dem Entwickler

Map

f

f

f

f

f

g

g

g

g

g

 MAP/REDUCE-ANSATZ § Das Map/Reduce-Programmiermodell teilt Aufgaben in kleine Teile auf und verteilt sie zur gleichzeitigen Verarbeitung auf unterschiedliche Rechnerknoten auf (Map-Phase) § Das Endergebnis entsteht durch die Zusammenführung der Teilergebnisse (ReducePhase)

Fold

5

Wurzeln und funktionale Progammierung  WURZELN

VON

MAP/REDUCE

§ Das Konzept MapReduce hat seine Wurzeln in Lisp § Lisp kennt die beiden Funktionen map() und reduce() § Lisps map-Funktion wird mit einer Liste von Eingabewerten und einer Funktion als Parameter aufgerufen - die übergebene Funktion wird auf jeden Wert der Liste angewendet

§ Lips reduce-Funktion ruft man auch mit einer Funktion und einer Liste mit Eingabewerten auf - Reduce arbeitet ähnlich wie map, führt aber alle Ergebnisse zusammen

 MAP/REDUCE BASIERT

AUF DEM

PRINZIP

FUNKTIONALE

PROGRAMMIERUNG § Funktionale Programmierung ist ein Programmierstil, bei dem Programme ausschließlich aus Funktionen bestehen § Funktionale Programme sind eine Menge von (Funktions-)Definitionen § (Funktions-)Definitionen sind partielle Abbildungen von Eingabedaten auf Ausgabedaten § Die Eingabedaten werden nie verändert! § Die Funktionen sind idempotent (frei von Seiteneffekten) - bei jedem identischen Aufruf wird das gleiche Ergebnis zurückgeliefert

§ Es werden ausschließlich Berechnungen mit Eingabedaten durchgeführt und neue Zwischenergebnisse gebildet

6

MapReduce besteht aus 3 Schritten: Map/Reduce Partitionierung der Ausgangsdaten 2 Abbilden (Mappen) der Daten auf eine Datenstruktur, die aus einem  MAP/REDUCE BESTEHT AUS 3 SCHRITTEN Schlder u besteht und Kombinieren der Daten ¨ssel-Wert-Paar § Partitionierung Eingabedaten § Abbilden (Mappen) der Daten auf! einelist Datenstruktur, die aus einem Schlüssel-Wert-Paar besteht und Kombinieren der map (k1,v1) (k2,v2) Daten 3 v1) Reduzieren ¨ssel-Wert-Paare zum Ergebnis map(k1, à list(k2, v2) (Reduce) der Schlu § Reduzieren (Reduce) der Schlüssel-Wert-Paare zum Ergebnis reduce (k2,list(v2)) ! list (v2) reduce(k2, list(v2)) à list(v2) 1

Dr. Christian Baun – 11.Vorlesung Cluster-, Grid- und Cloud-Computing – Hochschule Mannheim – WS1112

7

11/80

Beispiel – Map MAP

ERZEUGT ALS

ZWISCHENERGEBNIS

EINE

SAMMLUNG VON (SCHLÜSSEL, WERT )-PAAREN

BEISPIEL: ZÄHLE WÖRTER IN EINEM DOKUMENT

map(dokumentName, wert){ for each word w in wert emit(w, "1"); }

§

Textinhalt des Dokuments

§

Emittiert für jedes Wort ein Paar, welches das Wort und die Häufigkeit 1 enthält. Für dasselbe Wort, das mehr als einmal vorkommt, werden mehrere Paare erzeugt

§ Anmerkung: Die Eingabe (dokumentName, wert) ist auch ein Paar, jedoch haben dessen Elemente einen anderen Definitionsbereich als die Elemente der emittierten Paare

8

Beispiel – Reduce REDUCE

KOMBINIERT

ZWISCHENERGEBNISSE

§

§ Beispiel (fortgesetzt)

§ reduce(wort, werte){ int ergebnis = 0; for each w in werte ergebnis += w; emit(wort, ergebnis); }

Liste mit Worthäufigkeiten: Entsteht durch Aufsammeln und Gruppieren mehrerer Paare, die dasselbe Wort als Schlüssel haben (Shuffle) Wird der Reduce-Operation als Iterator übergeben. Auf diese Weise sind große Datenmengen handhabbar, die sonst nicht vollständig in den Speicher passen würden

Summiere die Häufigkeiten aus der Werteliste auf und emittiere das Ergebnis

§ Anmerkung: Elemente der Eingabe-Paars haben denselben Definitionsbereich wie die des Ausgabe-Paars (Yahoo‘s Hadoop ist hier etwas großzügiger.) § Es kann mehrere Arbeiter geben, welche die Reduktionsoperation ausführen und selbst wieder Zwischenergebnisse emittieren

9

MapReduce – Ablauf im Detail (1) User Program (1) fork (1) fork

Master

(2) assign map

(1) fork

(2) assign reduce

worker split split split split split

0 1 2 3 4

(5) remote read

(3) read

worker

worker

(4) local write

worker

(6) write

output file 0 output file 1

worker

Input files

Map phase

Intermediate files (on local disk)

Reduce phase

Output files

10

MapReduce – Ablauf im Detail (2) §

split split split split split

0 1 2 3 4

User Program

Für die parallele Ausführung der Map-Operation (1) submit werden zunächst die Eingabedaten in M disjunkte Master Partitionen ("splits") zerlegt § (2)Etwa 16-64 proschedule Partition (kontrollierbar durch schedule mapMB (2) reduce Parameter) worker § Können parallel auf verschiedenen Rechnern bearbeitet werden (6) write output (5) remote read

(3) read

worker

worker

(4) local write

worker

file 0 output file 1

worker

Input files

Map phase

Intermediate files (on local disk)

Reduce phase

Output files

11

MapReduce – Ablauf im Detail (3) User Program (1) fork (1) fork

Master

(2) assign map

(1) fork

(2) assign reduce

worker split split split split split

0 1 2 3 4

Input files

(5) remote read

(3) read§

Danach: Starte Kopien des (4) local write Programms auf Rechner im worker Cluster (1) § Definiere eine Instanz als Koordinator, den Rest als Arbeiter worker Map phase

Intermediate files (on local disk)

worker

worker

Reduce phase

(6) write

output file 0 output file 1

Output files

12

MapReduce – Ablauf im Detail (4) User Program (1) fork (1) fork

Master

(2) assign map

(1) fork

(2) assign reduce

worker split 0 (5) remote read split 1 (3) read Koordinator § split (Master) weist laufenden Arbeiter(4) local write 2 worker split 3 Instanzen Map- oder Reduce-Aufgabe zu (2) split 4 (beachtet Lokalitätsgesichtspunkte)

§ § Input files

worker

worker

Es werden M Map-Aufgaben und worker R Reduce-Aufgaben zugewiesen Map phase

Intermediate files (on local disk)

Reduce phase

(6) write

output file 0 output file 1

Output files

13

MapReduce – Ablauf im Detail (4) Arbeiter mit Map-Aufgabe Liest Inhalte seiner zugewiesenen Partition (3) (1) fork § Bearbeitet alle Eingabepaare mit seiner Map(1) fork Funktion (1) fork Master § Die Ergebnisse werden im Hauptspeicher (2) assign map (2) assign reduce gepuffert § In periodischen Abständen werden Puffer worker auf Festplatte geschrieben (4) write output (5) remote read § Anhand einer(6) Partitionierungsfunktion worker file (z.B. 0 (4) local write in R Partitionen unterteilt worker hash(key) mod R) output Ablageort der Partitionen wird § Der worker file 1 dem Koordinator gemeldet, der für die worker Übergabe an Reduce-Arbeiter verantwortlich ist Map Intermediate files Reduce Output phase (on local disk) phase files User § Program

split split split split split

0 1 2 3 4

Input files

(3) read

14

MapReduce – Ablauf im Detail (5) Arbeiter mit Reduce-Aufgabe User § Wird vom Koordinator benachrichtigt Program § Bekommt Ablageort für Zwischen(1) fork ergebnisse (Partitionen), die er von den (5)fork Festplatten der Worker liest (1) (1) fork Master § Shuffle: Sortierung der Paare nach Schlüssel, (2) assign map (2) assign reduce so dass Paare mit gleichem Schlüssel gruppiert werden worker § Arbeiter split 0 iteriert darüber (5) remote read § Jeder wird samt der worker splitSchlüssel 1 (3) read (4) local write split 2 zugehörigen Werte der worker split 3 Reduktionsoperation übergeben split 4der Reduktionsfunktion wird in worker § Das Ergebnis einer Ausgabedatei angefügt, die zur worker Partition assoziiert ist (6) Input files

Map phase

Intermediate files (on local disk)

Reduce phase

(6) write

output file 0 output file 1

Output files

15

MapReduce – Ablauf im Detail (6) §

Wenn alle Map- und Reduce-Aufgaben bearbeitet wurden, kehrt der Aufruf zum BenutzerUser Program Programm zurück. (1)§forkDie Ausgabe des MapReduce-Programms befindet sich in R Dateien (eine pro Reduktions(1) fork (1) fork Master Aufgabe) §(2) assign Können als Eingabe für weitere Map-Reduce(2) assign map reduce Aufrufe verwendet werden worker split split split split split

0 1 2 3 4

(5) remote read

(3) read

worker

worker

(4) local write

worker

(6) write

output file 0 output file 1

worker

Input files

Map phase

Intermediate files (on local disk)

Reduce phase

Output files

16

Fehlertoleranz WORKERS § § § § §

Werden periodisch abgefragt, ob noch funktionsfähig Keine Antwort: Kennzeichnung als nicht funktionsfähig Zugewiesene Aufgaben werden vom Koordinator neu verteilt Auch erfolgreich beendete Map-Aufgaben werden neu verteilt, da deren Ausgabe auf lokaler Festplatte war Reduce-Arbeiter werden über Änderung benachrichtigt

KOORDINATOR § Zustand wird regelmäßig gesichert („Checkpointing“) § Bei Versagen: Neustart und Wiederherstellung des letzten gesicherten Zustands

FEHLERTOLERANZ

IST DER ZENTRALE

VORTEIL VON MAPREDUCE!

§ Es geht bei MapReduce nicht nur darum, Rechenaufwand zu parallelisieren.

17

Verteiltes Dateisystem WIE

GELANGEN DIE

VERSCHIEBE

DATEN

NICHT DIE

ZU DEN

DATEN

WORKERS?

ZU DEN

WORKERS,

SONDERN DIE

WORKERS ZU DEN DATEN!

§ Daten sind auf den lokalen Festplatten der einzelnen Knoten im Cluster gespeichert § Starten der Workers an welchen die Daten lokal vorliegen

DATEN

IN EINEM VERTEILTEN

DATEISYSTEM

GESPEICHERT

§ GFS (Google File System) für Googles MapReduce § HDFS (Hadoop Distributed File System) für Hadoop

GOOGLES MAPREDUCE § Map speichert Ergebnis im lokalen Dateisystem. § Reduce holt sich Daten via RPC; schreibt Ergebnis in verteiltes Dateisystem (GFS).

18

MapReduce – Beispiele WETTERDATEN

  1. UNSTRUKTURIERTE WETTERDATEN

EINLESEN

§ 0029029070999991901010106004+64333+023450FM-12+00059 9999V0202701N015919999999N0000001N900781+9999910200 1ADDGF108991999999999999999999 1901-01-01 § 0029029070999991901010113004+64333+023450FM-12+00059 13:00 -7,2°c 9999V0202901N008219999999N0000001N9-00721+9999910200 1ADDGF104991999999999999999999

19

MapReduce – Beispiele (2) WETTERDATEN

  2. ZUORDNUNG § § §

VON

DATEI-INHALT

ZU POSITIONEN

Jede Zeile wird anhand des Byte-Offsets identifiziert Byte-Offset verweist jeweils auf den Beginn der Zeile (k1, v1) = (long, String)

20

MapReduce – Beispiele (3) WETTERDATEN

  3. MAP: TRANSFORMIEREN § §

DIESER

SCHLÜSSEL-/WERTE-PAARE

Benötigte Daten werden aus den Zeilen extrahiert Es entstehen viele Key/Value-Paare

IN

ZWISCHEN-SCHLÜSSEL-WERTE-PAARE Jahr

Temperatur

1950

0

1950

22

1949

111

1949

78

21

MapReduce – Beispiele (4) WETTERDATEN

  4. SHUFFLE: ERZEUGEN

VON GRUPPIERTEN

SCHLÜSSEL-/WERTE-PAAREN

§ Sortieren der Schlüssel § Zuordnen von Werten zu einem Schlüssel § Jeder Mapper schreibt den sortierten Output ins Filesystem § Pro Jahr wird ein eigener Reducer auf einem Rechner im Cluster ausgeführt

Jahr

Temperatur

1949

111 78

1950

0 22

22

MapReduce – Beispiele (5) WETTERDATEN

  5. REDUCE § §

Zusammenfassung der Werte (hier: Maximum finden) Pro Schlüssel nur noch ein Wert

Jahr

Temperatur

1949

111

1950

22

23

MapReduce – Beispiele (6) WETTERDATEN

  6. AUSGABE IN

EINE

DATEI

24

Beispiele, wo MapReduce hilfreich ist  VERTEILTE HÄUFIGKEITSANALYSE § Wie häufig kommen welche Wörter in einem umfangreichen Text vor? - Map-Funktion: Schreibt in einen Zwischenspeicher - Reduce-Funktion: Addiert die Werte für ein Wort zu

 VERTEILTES GREP § In welchen Zeilen eines Textes kommt ein Suchmuster vor? - Map-Funktion: Schreibt gefundene Zeilen in einen Zwischenspeicher - Reduce-Funktion: Reicht die Zwischenergebnisse zur Ausgabe durch

 BERECHNUNG

VON

WEBSEITEN-ANFRAGEN

§ Map-Funktion: Durchsucht die Webserver-Logdaten und schreibt Schlüssel-Wert-Paare in einen Speicher für Zwischenergebnisse § Reduce-Funktion: Addiert die Werte ür eine URL zu

...

25

Analyse – Verteiltes Grep PERFORMANZ § Ausführung eines auf MapReduce basierenden grep-Programms (Global Regular Expression Print) § Durchsucht 10 10 100-Byte lange Datensätze (~ 1TB) nach einem seltenen, drei Zeichen langem Muster (nur in 92.337 Datensätzen vorhanden) § Eingabe in M=15.000 Partitionen à 64MB unterteilt, Ausgabe in einer einzigen Partition (R=1) § Datentransferrate im zeitlichen Verlauf (Cluster mit 1.800 Rechnern, mit je 2GHz Intel Xeon, 4GB RAM, 2x160GB HD, Gigabit Ethernet)

Rate, mit der Eingabedaten gelesen werden

Sekunden nach Ausführung 26

Analyse – Verteiltes Grep (2) PERFORMANZ (FORTSETZUNG) § § § §

Rate nimmt anfangs zu, wenn mehr und mehr Rechnern Arbeit zugewiesen wird Maximum bei ~30GB/s und 1.764 Arbeitern Danach beginnen Map-Aufgaben fertig zu werden Gesamtdauer der Ausführung etwa 150s; Mehraufwand beim Start ~1 Minute (Programm auf verschiedenen Rechnern starten, etc.)

27

Map-Reduce – Implementierungen DAS MAPREDUCE-KONZEPT

IST NICHT AN EINE BESTIMMTE

RECHNERARCHITEKTUR

GEBUNDEN

§ Die Implementierung der Schnittstelle kann z.B. auf Rechner mit verteiltem Speicher (Cluster) oder gemeinsamen Speicher (Multicore-Rechner) zugeschnitten sein § Beispiel für Implementierungen - Auf Architektur mit gemeinsamen Speicher: Phoenix (Stanford, C++/PThreads) - Auf Architektur mit verteiltem Speicher: Google, Hadoop

28

Map-Reduce – Implementierungen (2) PROPRIETÄRE ENTWICKLUNG

DURCH

GOOGLE

§ Implementiert in C++ § Bindings in Java, Python

OPEN-SOURCE-IMPLEMENTIERUNG

IN

J AVA (HADOOP)

§ Ursprünglich von Yahoo entwickelt, produktiv eingesetzt § Mittlerweile Apache-Projekt § http://hadoop.apache.org/mapreduce/

VIELE FORSCHUNGSPROTOTYPEN § Umsetzungen für GPUs - Bingsheng He, Wenbin Fang, Qiong Luo, Naga K. Govindaraju, and Tuyong Wang. Mars: A MapReduce Framework on Graphics Processors. PACT 2008

§ Cell-Prozessoren - Marc de Kruijf and Karthikeyan Sankaralingam. MapReduce for the Cell B.E. Architecture. IBM Journal of Research and Development, 53(5), 2009.

29

Hadoop

Hadoop - Überblick WAS IST HADOOP? § § § §

Hadoop ist eine Implementierung des MapReduce-Konzepts Open Source Projekt der Apache Software Foundation Download für Unix/Linux verfügbar Programmierung mit Java, Python, C++, etc. möglich

HADOOP KOMPONENTEN § Hadoop Common - Stellt Grundfunktionen bereit: implementierungsneutrale File-System-Schnittstelle, Schnittstelle für die RPC-Kommunikation im Cluster

§ Hadoop Distributed FileSystem (HDFS) -

Primäre Dateisystem von Hadoop, folgt dem Vorbild des Google-Dateisystems Eingabe-Dateien müssen erst in das HDFS kopiert werden, bevor sie verwendet werden können Master-Slave Struktur, Fehlertoleranz durch dreifache Redundanz Performanz auf sequentielles Lesen und Schreiben ganzer Blöcke optimiert Es werden auch andere Dateisysteme unterstützt (z.B. CloudStore, S3)

§ Hadoop MapReduce - Bietet alle Funktionen um nach dem MapReduce-Programmiermodell zu entwickeln

31

Hadoop-Anwendungen@Yahoo 2008

2009

Webmap

~70 hours runtime ~300 TB shuffling ~200 TB output 1480 nodes

~73 hours runtime ~490 TB shuffling ~280 TB output 2500 nodes

Sort benchmarks (Jim Gray contest)

1 Terabyte sorted § 209 seconds § 900 nodes

1 Terabyte sorted § 62 seconds, 1500 nodes 1 Petabyte sorted § 16.25 hours, 3700 nodes

Largest cluster

2000 nodes § 6PB raw disk § 16TB of RAM § 16K CPUs

4000 nodes § 16PB raw disk § 64TB of RAM § 32K CPUs § (40% faster CPUs too) 32

Exercise

TPC-H Tips  TPC-H: AN AD-HOC,

DECISION SUPPORT BENCHMARK

§ http://www.tpc.org/tpch/default.asp § Consists of a schema, a data generator, and 22 analytical queries

34

TPC-H Tips  TPC-H: AN AD-HOC,

DECISION SUPPORT BENCHMARK

§ http://www.tpc.org/tpch/default.asp § Consists of a schema, a data generator, and 22 analytical queries

 INSTALLATION § Download the tools, copy and edit makefile.suite, run make § Example settings in makefile: -

DATABASE=ORACLE MACHINE=LINUX WORKLOAD=TPCH On OSX, adding „-I/usr/include/malloc“ to CFLAGS seems necessary

§ dbgen generates data (*.tbl) files, which are usually loaded into an RDBMS - With Hadoop, we just directly read the files from HDFS and map&reduce them line-by-line - dbgen‘s most interesting parameter is the scaling factor (-s) that determines the output database‘s size in GB (roughly). Leaving it at 1 is ok for this exercise, so a call might look like „./dbgen -vf -s 1“

§ qgen fills variables in query template, not necessary for this exercise, just have a look at the query templates in „queries“

35

TPC-H Q1

36

Task  GENERATE

A TPC-H DATABASE AND LOAD IT INTO

 IMPLEMENT Q1 AS A MAP/REDUCE

HDFS

JOB

§ Think carefully about which parts of the SQL query you put into map() and which into reduce()

 PREPARE 1-2 SLIDES WITH

THE MOST INTERESTING/ DIFFICULT PARTS OF THE IMPLEMENTATION, AND DISCUSS. IDEAS FOR

DISCUSSION:

§ How much can this query be parallelized by using Hadoop? What is the bottleneck, i.e., the „most sequential“ part of the calculation? § Is there anything that could be done about this? Is there anything specific in Hadoop that could be done? Under what conditions?

37