Datenbankanwendung Wintersemester 2014/15 Prof. Dr.-Ing. Sebastian Michel TU Kaiserslautern [email protected] MapReduce, NoSQL MapReduce MapReduce - Veranschaulichung der Phasen Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 2 / 44 MapReduce, NoSQL MapReduce Formal: Map und Reduce Funktionen map(k1, v1) → list(k2, v2) reduce(k2, list(v2)) → list(k3, v3) Schlüssel (Keys) erlauben Daten Maschinen zu zuordnen. Beispiel für Schlüssel k1 = Id eines Dokuments (oder Offset in Datei) v1 = Inhalt des Dokuments (oder Zeile in Datei) k2 = Wort v2 = Zähler k3 = Wort v3 = Zähler Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 3 / 44 MapReduce, NoSQL MapReduce SQL in MapReduce: Selektion und Projektion Gegeben eine Relation R mit sch(R) = (A, B, . . .). Tupel sind in einer Datei gespeichert (z.B. als CSV-Datei). Wie können typische SQL Anfragen ausgeführt werden? Selektion WHERE Klausel kann leicht in Map-Phase überprüft werden. Wie bei dem Grep-Beispiel. Kein Reducer erforderlich. Projektion Ebenfalls offensichtlich: Nur gewünschte Attribute der Tupel werden ausgegeben (emit). Auch hier ist kein Reducer notwendig. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 4 / 44 MapReduce, NoSQL MapReduce SQL in MapReduce: Group-By, Aggregate, Having select abteilung, avg(gehalt) from gehaelter group by abteilung having avg(gehalt) > 50000 Group-By, Aggregate Map: Sendet Tupel zu Reducer anhand des Attributs, nach dem gruppiert wird, hier der Abteilung, als Schlüssel. Reducer erhält somit alle Tupel die gleichen Wert für Abteilung haben und kann dann gruppieren. Having Having ist ein Überprüfung einer Eigenschaft auf den Daten einer Gruppe, wird also auch im Reducer ausgeführt. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 5 / 44 MapReduce, NoSQL MapReduce SQL in MapReduce: Joins in MapReduce Ein einfacher Equi-Join (hier sogar Natürlicher-Join) zwischen zwei Relationen R und S mit sch(R) = (A, B) und sch(S) = (B, C), also select * from R, S where R.B=S.B Beispielausprägung der Relationen: R A x y w ... S B 18 9 64 ... B 6 5 9 ... C w e r ... Wie kann dieser Join mit Hilfe von MapReduce realisiert werden? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 6 / 44 MapReduce, NoSQL MapReduce Joins in MapReduce Offensichtlich muss geschaut werden welche Tupel aus R und S verbunden (gejoint) werden können. Im Fall des Natürlichen-Joins bzw. Equi-Joins ist dies besonders einfach: Ergebnisse müssen, hier im Beispiel, im Attribut B übereinstimmen, also R.B = S.B. Wie kann man erreichen, dass Tupel mit gleichem Attributwert für B auf der gleichen Maschine landen? Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 7 / 44 MapReduce, NoSQL MapReduce Reduce-Side Join (Equi-Join) Map Sende Tupel t zu Reducer anhand Schlüssel t.B Zusätzlich zum Tupel wird auch noch mitgeschickt ob t aus R oder aus S ist. Wieso? Reduce Joine Tupel t1 , t2 falls t1 .b = t2 .b und t1 aus R ist und t2 aus S. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 8 / 44 MapReduce, NoSQL MapReduce Map-Side Join - Spezialfall Für den Fall, dass eine der beiden Relationen klein ist, sagen wir R: Map Gesamte Relation R ist bekannt Join kann also im Map-Prozess durchgeführt werden. Ausgabe ist das verbundene Tupel Reduce Es ist kein Reducer erforderlich! Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 9 / 44 MapReduce, NoSQL MapReduce Reduce-Side Join mit Optimierung durch Semi-Join-Trick Wie zuvor, Relationen R und S mit sch(R) = (A, B) und sch(S) = (B, C) und auch wieder Equi-Join, d.h. Join über gleiche Werte von B Nun, Annahme: Anzahl der distinct B Werte in R ist klein. Map Alle distinct Werte des Attributs B der Relation R sind bekannt; nennen wir die Menge D Sende Tupel aus R anhand des Schlüssels R.B Aber: Sende Tupel t aus S anhand Schlüssel t.B falls t.B ∈ D Reduce hier wird der tatsächliche Join (das Verbinden von Tupeln) ausgeführt Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 10 / 44 MapReduce, NoSQL MapReduce Die Geschichte von MapReduce Ursprung bei Google Beschrieben in einem Artikel aus 2004: Prinzip, Anwendungsfälle, Google-File-System, etc. Jeffrey Dean, Sanjay Ghemawat: MapReduce: Simplified Data Processing on Large Clusters. OSDI 2004: Nachfolgearbeiten/Implementierungen Es gibt einige z.T. frei verfügbare MapReduce Implementierungen. Am wohl bekanntesten ist Hadoop (Apache), ursprünglich bei Yahoo entwickelt; frei verfügbar. Tipp: Hortonworks bietet Virtual Machine (VM) zum Herumspielen mit Hadoop und anderen neuen Technologien an http://hadoop.apache.org/ http://hortonworks.com/products/hortonworks-sandbox/ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 11 / 44 MapReduce, NoSQL MapReduce Code: WordCount in Hadoop (Ausschnitt!) 1 p u b l i c s t a t i c c l a s s Map e x t e n d s Mapper< L o n g W r i t a b l e , Text , Text , I n t W r i t a b l e > { 2 3 4 5 6 7 8 9 10 11 p u b l i c v o i d map ( L o n g W r i t a b l e key , Text v a l u e , Context context ) throws IOException , InterruptedException { String l i n e = value . toString () ; S t r i n g T o k e n i z e r t o k e n i z e r = new StringTokenizer ( line ) ; w h i l e ( t o k e n i z e r . hasMoreTokens ( ) ) { word . s e t ( t o k e n i z e r . nextToken ( ) ) ; c o n t e x t . w r i t e ( word , one ) ; } } } Wie genau Key und Value ausschauen hängt von Implementierung des InputFormat ab. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 12 / 44 MapReduce, NoSQL MapReduce Code: WordCount in Hadoop (Ausschnitt!) (2) 1 p u b l i c s t a t i c c l a s s Reduce e x t e n d s Reducer<Text , I n t W r i t a b l e , Text , I n t W r i t a b l e > { 2 3 4 5 6 7 8 9 p u b l i c v o i d r e d u c e ( Text key , I t e r a b l e < IntWritable > values , Context context ) throws IOException , I n t e r r u p t e d E x c e p t i o n { i n t sum = 0 ; for ( IntWritable val : values ) { sum += v a l . g e t ( ) ; } c o n t e x t . w r i t e ( key , new I n t W r i t a b l e ( sum ) ) ; } 10 11 } Quelle: http://wiki.apache.org/hadoop/WordCount Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 13 / 44 MapReduce, NoSQL MapReduce Code: WordCount in Hadoop (Ausschnitt!) (3) 1 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) t h r o w s E x c e p t i o n { C o n f i g u r a t i o n c o n f = new C o n f i g u r a t i o n ( ) ; 3 4 Job j o b = new Job ( c o n f , ” w o r d c o u n t ” ) ; 5 6 7 j o b . s e t O u t p u t K e y C l a s s ( Text . c l a s s ) ; job . setOutputValueClass ( IntWritable . c l a s s ) ; 8 9 10 j o b . s e t M a p p e r C l a s s (Map . c l a s s ) ; j o b . s e t R e d u c e r C l a s s ( Reduce . c l a s s ) ; 11 12 13 job . setInputFormatClass ( TextInputFormat . c l a s s ) ; j o b . s e t O u t p u t F o r m a t C l a s s ( TextOutputFormat . c l a s s ) ; 14 15 16 F i l e I n p u t F o r m a t . a d d I n p u t P a t h ( j o b , new Path ( a r g s [ 0 ] ) ) ; F i l e O u t p u t F o r m a t . s e t O u t p u t P a t h ( j o b , new Path ( a r g s [ 1 ] ) ) ; 17 18 19 job . waitForCompletion ( true ) ; } Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 14 / 44 MapReduce, NoSQL MapReduce Screenshot Hadoop Distributed File System Web UI Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 15 / 44 MapReduce, NoSQL MapReduce Screenshot Hadoop Web UI (Monitoring) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 16 / 44 MapReduce, NoSQL MapReduce Typische Topologie Switch Rack 1 Rack 2 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Disks Disks Disks Disks Disks Disks Topology kann/muss in einer Konfigurationsdatei mitgeteilt werden. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 17 / 44 MapReduce, NoSQL MapReduce Rack Awareness Data-local, rack-local und off-rack Map-Prozesse. node rack Map task HDFS block data center Kostenmodell gibt Kosten für diese einzelnen Fälle an. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 18 / 44 MapReduce, NoSQL MapReduce Ein Zusätzlicher “Combiner” - Probleme Beobachtung In der Map-Phase können große Mengen an Zwischenergebnissen anfallen Da Netzwerk-Bandbreite oft kritisch für Performance ist sollte versucht werden diese Zwischenergebnisse zu reduzieren(!) Dies funktioniert für Funktionen wie max: max(1, 2, 6, 2, 1, 9) = max(max(1, 2, 6), max(2, 1, 9)) Der Combiner Wird auf die Ausgabe eines (jeden) Map-Prozessen angewendet Normalerweise identisch zu dem Reducer (im Sinne von “Code”) Aber: Kein Ersatz für den Reducer! Wieso? Der Combiner sieht nur Zwischenergebnisse! Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 19 / 44 MapReduce, NoSQL MapReduce Ein Zusätzlicher “Combiner” Achtung: Manche Aggregationen (Funktionen) können nicht lokal ausgeführt werden. Beispiel: Gib Ausgabe aus falls sum(value) > τ Wieso geht das i. Allg. schief? Combiner kann diese Entscheidung nicht treffen, da er nur lokale Informationen sieht. Und nicht ob global die Summe über oder unter Grenzwert liegt. Trotzdem macht hier evtl. ein Combiner Sinn, dann aber nur aufsummieren und nicht entscheiden ob über oder unter Grenzwert Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 20 / 44 MapReduce, NoSQL MapReduce Bewertung von MapReduce Positiv Einfaches Modell Skalierbar Zielt auf hohen Durchsatz Implementierung tolerant gegenüber Ausfällen von Knoten Negativ Sehr einfache Routinen; Implementierung komplexerer Algorithmen wird leicht umständlich Für komplexe Dingen sind oft mehrere Iterationen von MapReduce nötig Schreiben von komplexen Anfragen ebenso. SQL (oder so etwas in der Art) nicht unterstützt Langsame Antwortzeit (schlecht für individuelle, kleine Arbeiten) Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 21 / 44 MapReduce, NoSQL MapReduce Ausblick auf weitere MapReduce Themen (in DDM Vorlesung) Hadoop Realisierung Hadoop Distributed File System Realisierung Hadoop MapReduce, Ausfallsicherheit, etc. Partitionierer, Composite Keys, Sortierung (secondary sort) Auf MapReduce aufbauend Pig (mit Anfragesprache PigLatin): übersetzen von komplexeren Datenverarbeitungsbefehlen in MapReduce Workflow Hive: Mächtigere Sprache (∼SQL), wird auf MapReduce abgebildet. Daten-Analyse-Algorithmen Graphalgorithmen, insbesondere PageRank Statistiken zu Worthäufigkeiten Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 22 / 44 MapReduce, NoSQL NoSQL NoSQL Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 23 / 44 MapReduce, NoSQL NoSQL Was steckt hinter NoSQL? Beobachtung/Hypothese: Es gibt kein one-size-fits-all Datenbanksystem! NoSQL = Not Only SQL (nicht unbedingt “no” SQL) Steht als Bezeichner für eine Vielzahl von nicht traditionellen Datenmanagement-Systemen, die stark auf die Anwendung zugeschnitten sind: - Key-Value-Datenbanken - Graph-Datenbanken - Dokument-Datenbanken Überblick gibt es unter: http://nosql-database.org/ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 24 / 44 MapReduce, NoSQL NoSQL Charakteristika von NoSQL Systemen Kein relationales Datenmodell System sind ausgelegt horizontal zu skalieren (scale out), also Daten und Datenverarbeitung über mehrere Maschinen zu verteilen. Kein Schema oder nur sehr lose beschrieben. Einfache API (normalerweise keine Unterstützung von SQL): CRUD (create, read, update, delete). Üblicherweise keine ACID Semantik. Stattdessen: BASE ;) Oftmals sind diese System open-source. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 25 / 44 MapReduce, NoSQL NoSQL NoSQL: Key/Value Datenbanken Speichern von Key-Value Paaren Values können komplexe(re) Datentypen sein Beispiele von Systemen: Amazon Dynamo, Redis, Voldemort Zugriff via CRUD-Operationen: Create, Read, Update, Delete Einige Systeme unterstützen auch mächtigere/komplexere Anfragetypen. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 26 / 44 MapReduce, NoSQL NoSQL Beispiel: Key-Value-Store: Redis Online Tutorial: http://try.redis.io Get und Set SET name ”Datenbankanwendung” GET name → Datenbankanwendung Operationen auf Listen LPUSH meineListe ”a” LPUSH meineListe ”b” LLENGTH →2 LRANGE meineListe 0 1 Prof. Dr.-Ing. S. Michel TU Kaiserslautern → ”b”,”a” Datenbankanwendung, WS 14/15 27 / 44 MapReduce, NoSQL NoSQL Dokumenten Datenbanken Speichern JSON (Javascript Object Notation), siehe Beispiel links, oder XML Dokumente Systeme: MongoDB oder CouchDB Prof. Dr.-Ing. S. Michel TU Kaiserslautern { "firstName":"John", "lastName":"Smith", "age":25, "address":{ "street":"21 2nd Street", "city":"New York", "state":"NY", "postalCode":10021 }, "phoneNumbers":[ { "type":"home", "number":"212 555-1234" }, { "type":"fax", "number":"646 555-4567" } ] } Datenbankanwendung, WS 14/15 28 / 44 MapReduce, NoSQL NoSQL Beispiel: MongoDB Online Tutorial: http://try.mongodb.org var student = {name:'Jim', scores:[75,99,87.2]}; db.lecture.store(student); db.lecture.find(); --liefert alle Eintraege db.lecture.find({name:'Jim'}); --spezielle Suche db.users.update({name:'Johnny'},{name:'Cash', languages:['english']}); MongoDB unterstützt MapReduce http: //docs.mongodb.org/manual/tutorial/map-reduce-examples/ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 29 / 44 MapReduce, NoSQL NoSQL CAP Theorem Ein System kann nicht gleichzeitig die folgenden drei Eigenschaften unterstützen: - Consistency (Konsistenz) - Availability (Verfügbarkeit) - Partition Tolerance (Daten/verarbeitung verteilt auf mehrere Maschinen) C C+A C+P A A+P P http://webpages.cs.luc.edu/~pld/353/gilbert_lynch_brewer_ proof.pdf Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 30 / 44 MapReduce, NoSQL NoSQL Consistent + Available Beispiel: Traditionelle C (zentralisierte) Datenbanksysteme Prof. Dr.-Ing. S. Michel TU Kaiserslautern C+A A Datenbankanwendung, WS 14/15 31 / 44 MapReduce, NoSQL NoSQL Partition Tolerant + Available A Beispiel: Domain Name Service A+P (DNS) P Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 32 / 44 MapReduce, NoSQL NoSQL Consistent + Partition Tolerant C Beispiel: Verteilte Datenbanken C+P mit verteiltem Locking/Commit P Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 33 / 44 MapReduce, NoSQL NoSQL Und nun? Ohne ”P” geht es nicht Es sind große Datenmengen zu verarbeiten ⇒ Horizontela Skalierung D.h. das System muss Partitionierung der Daten/Verarbeitung auf verschiedene Maschinen unterstützen. Also ist ”P” gegeben. Was ist nun zu tun? Abwägung (Tradeoff) zwischen Konsistenz und Verfügbarkeit. C C+A C+P A A+P P Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 34 / 44 MapReduce, NoSQL NoSQL Idee Tradeoff zwischen Consistency und Availability. Repliziere Daten, d.h. mehrere Versionen pro Datensatz Replikate werden auf Maschinen verteilt Sende Updates an alle Replikate aber warte nicht auf Acknowledgement. Lesen Daten von Teilmenge der Replikate. D.h. sehr effizient aber nicht unbedingt garantiert konsistent (man kann alte Antworten erhalten) Erst nach einiger Zeit konsistent (wenn alle Replikate aktualisiert wurden): Eventual Consistency Bemerkung zu Consistency Consistency hier anders definiert als im DB-Kontext (in ACID). Hier, generell um Konsistenz von Replikaten (Kopien) einzelner Datenobjekte; dem Erzwingen bzw. nicht Erzwingen von garantierter Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 35 / 44 MapReduce, NoSQL NoSQL BASE Basically Available Soft State Eventual Consistency http: //www.allthingsdistributed.com/2008/12/eventually_consistent.html Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 36 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz Client schickt Schreibanweisung an Manager Dieser schickt Schreibanweisung an alle Replikate. Zeitstempel (im einfachsten Fall) beschreibt Zeitpunkt des Schreibens. Und schickt Acknowledgement zurück an Client sobald garantiert W Replikas aktualisiert wurden. Maschinen mit Replikas des Datenobjekts Manager write Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 37 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz (2) Client schickt Leseanweisung an Manager. Dieser leitet Anweisung an R Replikas. D.h. von N existierenden Replikaten werden R gelesen. Antworten werden an Client weiter geleitet. Maschinen mit Replikas des Datenobjekts read Manager Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 38 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz: Read N = 7 Replikate W = 3 und R = 2 Grün markiert sind Replikate, die die neue Version des Objekts besitzen Maschinen mit Replikas des Datenobjekts read Manager Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 39 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz: Read - OK N = 7 Replikate W = 3 und R = 2 Grün markiert sind Replikate, die die neue Version des Objekts besitzen Maschinen mit Replikas des Datenobjekts read d rea read Manager Alles super! Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 40 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz: Read - OK N = 7 Replikate W = 3 und R = 2 Grün markiert sind Replikate, die die neue Version des Objekts besitzen read read Maschinen mit Replikas des Datenobjekts read Manager Immer noch alles super! Zeitstempel (o.ä.) bestimmt neueste Version. Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 41 / 44 MapReduce, NoSQL NoSQL Veranschaulichung Inkonsistenz: Read - Nicht Korrekt N = 7 Replikate W = 3 und R = 2 Grün markiert sind Replikate, die die neue Version des Objekts besitzen Maschinen mit Replikas des Datenobjekts re ad ead r read Manager Alte Version gelesen! Client Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 42 / 44 MapReduce, NoSQL NoSQL Eventual Consistency und Konfigurationen Konfiguration: R + W > N In diesem Fall kann garantiert werden, dass immer die aktuelle Version gelesen wird. Da sich die Mengen der aktualisierten Replikate und die der angefragten Replikate überlappen müssen! Konfiguration: R + W ≤ N In diesem Fall liegt Eventual Consistency vor. Eventual Consistency Eventual (auf Deutsch: letztendlich) Consistency beschreibt, dass nach einer gewissen Zeit alle Replikate aktualisiert sind. Aber ab dem Schreibvorgang bis zu diesem Zeitpunkt ist nicht garantiert, dass Lesevorgänge die zuvor geschriebene Version sehen. Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 43 / 44 MapReduce, NoSQL NoSQL Ausblick VL Distributed Data Management (DDM) wwwlgis.informatik.uni-kl.de/cms/courses/ distributeddatamanagement/ Prof. Dr.-Ing. S. Michel TU Kaiserslautern Datenbankanwendung, WS 14/15 44 / 44