Preview only show first 10 pages with watermark. For full document please download

06 Mapreduce Framework 2x2

   EMBED


Share

Transcript

¨ Uberblick MapReduce: Einfu¨hrung MapReduce: Programmiermodell zur Strukturierung von Programmen f¨ ur parallele, verteilte Ausf¨ uhrung MapReduce Framework MapReduce Map und Reduce urspr¨ unglich Bausteine aus funktionalen Programmiersprachen (z. B. LISP) Einf¨ uhrung und Grundlagen Ablauf eines MapReduce-Jobs Aufgaben des Frameworks Map: Abbildung eines Eingabeelements auf ein Ausgabeelement Reduce: Zusammenfassung mehrerer gleichartiger Eingaben zu einer einzelnen Ausgabe Aufgabe 4 Abstract Factory Entwurfsmuster Vergleichen und Sortieren mit Java Zusammenf¨ uhrung vorsortierter Listen Futures Daten finden und extrahieren ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce Formulierung zu l¨ osender Aufgabe in MapReduce Aufteilen in (potentiell mehrere) Map- und Reduce-Schritte Implementierung der Map- und Reduce-Methoden (Entwickler) Parallelisierung und Verteilung (MapReduce-Framework) 6–1 MapReduce: Einfu¨hrung ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6–2 Hadoop-Framework (Komponenten) ,,MapReduce: Simplified data processing on large clusters” (OSDI’04) Implementierung von Google nicht o¨ffentlich Zahlreiche Open-Source-Implementierungen (z. B. Disco, Apache Hadoop, Phoenix) → Erm¨ oglicht Verarbeitung riesiger Datenmengen → Vereinfachung der Anwendungsentwicklung Literatur Jeffrey Dean and Sanjay Ghemawat MapReduce: Simplified data processing on large clusters Proceedings of the 6th Conference on Operating Systems Design and Implementation (OSDI ’04), pages 137–150, 2004. Quelle der Illustration: https://blog.codecentric.de/2013/08/einfuhrung-in-hadoop-die-wichtigsten-komponenten-von-hadoop-teil-3-von-5/ ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6–3 ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6–4 Ablauf von MapReduce Map-Phase ¨ Ubersicht: Ablauf eines MapReduce-Durchlaufs. Abbildung in der Map-Phase Parallele Verarbeitung verschiedener Teilbereiche der Eingabedaten Eingabedaten in Form von Schl¨ ussel-Wert-Paaren Abbildung auf variable Anzahl von neuen Schl¨ ussel-Wert-Paaren Partitionierung Merge o Key Value Eingabe Ausgabe Key Value Map Sortierung & Gruppierung Key Value Reduce Key Value Key Value Key Value Key Value ... Darstellung der Daten in Form von Schl¨ ussel-Wert-Paaren ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6–5 ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce Mapper-Schnittstelle Mapper-Beispiel Schnittstelle Mapper in Apache Hadoop Beispiel: Z¨ahlen von W¨ ortern Mapper-Eingabe Schl¨ ussel: Zeilennummer Wert: Textzeile Mapper-Ausgabe Schl¨ ussel: Wort Wert: Anzahl (hier: 1 f¨ ur jedes Wort) public class Mapper { void map(KEYIN key, VALUEIN value, Context context) { context.write((KEYOUT) key, (VALUEOUT) value); } } Festlegen von Datentypen mittels Generics“ ” key: Schl¨ ussel, z. B. Zeilennummer Key 1 value: Wert, z. B. Inhalt der Zeile Value We saw lions and tigers. The lions and we 1 Eingaben context: Ausf¨ uhrungskontext, enth¨alt write()-Methode zur Ausgabe von Schl¨ ussel-Wert-Paaren 2 lions 1 saw 1 fantastic 1 were 1 MapReduce Framework – MapReduce 6–7 tigers 1 } lions 1 the 1 and 1 and 1 Ausgabe tigers were fantastic. The lions had babies. tigers 1 ¨ MW-Ubung (WS14/15) 6–6 ¨ MW-Ubung (WS14/15) lions 1 the 1 babies had 1 MapReduce Framework – MapReduce 1 } Ausgabe 6–8 Sortierung und Gruppierung Partitionierer Zuordnung zu sp¨aterem Reducer bei Mapper-Ausgabe Sortierung und Gruppierung nach Schl¨ ussel Reducer-Eingaben unabh¨angig → parallelisierbar Gleiche Schl¨ ussel m¨ ussen zu gleichem Reducer Lokale Vorsortierung nach Verarbeitung der Daten durch Mapper Zusammenfassen aller Werte unter identischem Schl¨ ussel Statt Schl¨ ussel-Wert-Paar nun Schl¨ ussel und Liste von Werten Schnittstelle in Apache Hadoop public class Partitioner { int getPartition(KEY key, VALUE value, int numPartitions) { return Math.abs(key.hashCode()) % numPartitions; } } Key Value red 1 bike 1 Partition 1 red 1 red 1 low 1 rocks 1 Partition 2 rocks 1 shed 1 rocks 1 amiable 1 red 1 rocks 1 low 1 ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6–9 ¨ MW-Ubung (WS14/15) bike 1 amiable 1 MapReduce Framework – MapReduce Partition 3 shed 1 6 – 10 Ablauf von MapReduce Merge ¨ Ubersicht: Ablauf eines MapReduce-Durchlaufs. Eingaben f¨ ur Reducer befinden sich in (mehreren) Mapper-Ausgaben Zusammenfassung der vorsortierten Partitionen zu einer vollst¨andig sortierten und gruppierten Gesamtliste (Merge) Partitionierung Merge Eingabe Ausgabe Map ¨ MW-Ubung (WS14/15) Sortierung & Gruppierung MapReduce Framework – MapReduce Reduce 6 – 11 ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6 – 12 Reduce-Phase Reducer-Schnittstelle Zusammenf¨ uhren von Daten in der Reduce-Phase Schnittstelle Reducer in Apache Hadoop: Eingabe in Form von Schl¨ ussel und alle zugeh¨origen Werte aus Mapper Parallele Verarbeitung verschiedener Teilbereiche von Schl¨ usseln Abbildung auf variable Anzahl von neuen Schl¨ ussel-Wert-Paaren Key Values lions 1 1 1 1 Key Value lions 4 public class Reducer { void reduce(KEYIN key, Iterable values, Context context) { for(VALUEIN value : values) { context.write((KEYOUT) key, (VALUEOUT) value); } } } key: Schl¨ ussel aus Sortierungsphase values: Liste von Werten, welche zu dem Schl¨ ussel gruppiert wurden tigers 1 1 tigers 2 were 1 1 context: Ausf¨ uhrungskontext, enth¨alt write()-Methode zur Ausgabe von Schl¨ ussel-Wert-Paaren were 2 Reduce ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6 – 13 Aufgaben des Frameworks ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce 6 – 14 Framework-Entwicklung Generelle Steuerung der MapReduce-Abl¨aufe Framework stellt Rahmen f¨ ur Anwendungen auf Scheduling einzelner (Teil-)Aufgaben Einhaltung der Reihenfolge bei Abh¨angigkeiten Zwischenspeicherung der Daten Lediglich grunds¨ atzlicher Ablauf vorgegeben Details der Anwendung nicht vorab bekannt → Hohe Flexibilit¨at und Konfigurierbarkeit notwendig Implementiert grunds¨atzliche Algorithmen (z. B. Sortierung) Im Fall des MapReduce-Frameworks aus Aufgabe 4: Mapper Reducer Sortierung Bereitstellen von Schnittstellen zur Anpassung von Partitionierung Dateneingabe (Deserialisierung) Mapper Sortierung/Gruppierung Reducer Datenausgabe (Serialisierung) ¨ MW-Ubung (WS14/15) MapReduce Framework – MapReduce Ausw¨ahlbare Implementierung f¨ ur einzelne Schritte Framework muss notwendige Objekte selbst instanziieren L¨osung mittels Factory Pattern“ ” 6 – 15 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 16 Factory Pattern Abstract Factory Pattern Problemstellung: Es sollen Objekte instanziiert werden, welche eine bestimmte Schnittstelle zur Verf¨ ugung stellen, ohne dass der genaue Typ vorab bekannt ist. L¨osung durch weitere Abstraktionsschicht: Schnittstelle zur Instanziierung → Kapselung der Instanziierung in eigener Klasse public class WordCountMapper implements Mapper { ... } public interface MapperFactory { public Mapper createMapper(); } Beispiel: public class WordCountMapper implements Mapper { ... } public class WordCountFactory implements MapperFactory { public Mapper createMapper() { return new WordCountMapper(); } } public class WordCountFactory { public Mapper createMapper() { return new WordCountMapper(); } } Verwendung: Allerdings: Klasse WordCountFactory muss Framework bekannt sein void myMethod(MapperFactory mfact) { Mapper m = mfact.createMapper(); ... } ¨ MW-Ubung (WS14/15) ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 17 MapReduce Framework – Aufgabe 4 Sortieren mittels Comparator-Objekten Sortieren mittels Comparator-Objekten Standardisierte Schnittstellen zum Vergleich von Objekten: Comparable Verwendung: int x = links.compareTo(rechts); int y = comparator.compare(links, rechts); Vergleicht Objekt mit anderem gegebenen Objekt Methoden compareTo() und compare() liefern Integer zur¨ uck public interface Comparable { public int compareTo(T o); } negativ: Linker Wert kleiner als rechter Wert (kommt vor...) 0: Beide Werte sind gleich (¨ aquivalent) positiv: Linker Wert gr¨ oßer als rechter Wert (kommt nach...) Comparator Vergleicht zwei gegebene Objekte miteinander ¨ equals() vergleicht Aquivalenz verschiedener Comparator-Typen Beispiel: Strings r¨ uckw¨arts sortieren public abstract class Comparator { public int compare(T o1, T o2); public boolean equals(Object obj); } ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 18 class RevStringComparator implements Comparator { public int compare(String o1, String o2) { return -o1.compareTo(o2); } } 6 – 19 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 20 Sortieren mittels Comparator-Objekten Zusammenfu¨hrung mittels Priority-Queues ¨ Comparator erm¨oglicht Anderung der Sortierreihenfolge ohne Ableiten der zu sortierenden Objekte Aufgabe: Zusammenf¨ uhren bereits vorsortierter Listen Einstellung bei sortierenden Standard-Containern in Java Datenstruktur Priority-Queue Vergleich des obersten Elements u ¨ber alle Listen Kleinstes Element bestimmt n¨achstes Ausgabeelement Einf¨ ugen von Elementen mit zugeordneter Priorit¨at Entfernen entnimmt immer Element mit h¨ ochster Priorit¨at ¨ Ublicherweise als Heap-Datenstruktur implementiert Beispiel: TreeMap (implementiert SortedMap) RevStringComparator revcmp = new RevStringComparator(); TreeMap treemap = new TreeMap(revcmp); → Iterieren u ussel in umgekehrter Reihenfolge ¨ber Map liefert Schl¨ ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 21 Nutzung als Merge-Algorithmus: Priorit¨at entspricht Wertigkeit des obersten Elements jeder Liste Entnahme aus Priority-Queue liefert Liste mit n¨achstem Element ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 Zusammenfu¨hrung mittels Priority-Queues Zusammenfu¨hrung mittels Priority-Queues Algorithmus: Priority-Queues in Java: java.util.PriorityQueue 6 – 22 H¨ ochste Priorit¨ at entspricht erster Stelle nach Sortierung Festlegen der Sortierung mittels Comparator: 1. Priority-Queue mit vorsortierten Listen bef¨ ullen 2. Entnahme des Elements h¨ochster Priorit¨at liefert Liste, welche das n¨achste auszugebende Listenelement an erster Stelle enth¨alt public PriorityQueue(int capacity, Comparator c); 3. Ausgeben und Entfernen des obersten Listenelements aus der entnommenen Liste Einf¨ ugen eines Elements vom Typ E: public boolean add(E item); 4. Liste wieder in Priority-Queue einf¨ ugen 5. Wiederholen ab (2), bis alle Listen leer sind Abfrage des obersten Elements: public E peek(); Entnahme des obersten Elements: public E poll(); ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 23 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 24 Futures Futures in Java Oftmals synonym verwendet: Promise Schnittstelle Future Umfang Schnittstelle Methoden der allgemeinen Future-Schnittstelle Zus¨atzliche Methoden zum Abbrechen von Tasks boolean poll(); get(); Schnittstelle Funktionsweise 1. Beim asynchronen Aufruf wird (statt dem eigentlichen Ergebnis) sofort ein Future-Objekt zur¨ uckgegeben 2. Das Future-Objekt l¨asst sich befragen, ob der tats¨achliche R¨ uckgabewert der Operation bereits vorliegt bzw. ob die Operation beendet ist → poll() 3. Ein Aufruf von get() liefert das Ergebnis der Operation sofort zur¨ uck, sofern es zu diesem Zeitpunkt bereits vorliegt oder blockiert solange, bis das Ergebnis eingetroffen ist ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 Futures in Java public interface Future { public V get(); public V get(long timeout, TimeUnit unit); public boolean isDone(); // --> poll() public boolean cancel(boolean mayInterruptIfRunning); public boolean isCancelled(); } 6 – 25 java.util.concurrent.ExecutorService Anwendungsbeispiel Executor-Service Interface ExecutorService ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 Futures in Java – Anwendungsbeispiel 6 – 26 ExecutorService Klasse java.util.concurrent.Executors ¨ Uberblick Erlaubt asynchrone Ausf¨ uhrung von Tasks Task bei Executor-Service abgeben“, Ergebnis per Future ” Zentrale Methode Hilfsmethoden zur Erzeugung von Callable-Objekten Bereitstellung von ExecutorService-Implementierungen Wichtige Factory-Methoden f¨ ur ExecutorServices Future submit(Callable task) Ausf¨ uhrung in einem einzigen Thread public static ExecutorService newSingleThreadExecutor(); Interface Callable Schnittstelle Konstante Thread-Anzahl public interface Callable { V call() throws Exception; } public static ExecutorService newFixedThreadPool(int nThreads); ... Unterschiede zu Runnable ExecutorService R¨ uckgabewert Exception ¨ MW-Ubung (WS14/15) java.util.concurrent.Future nach Verwendung wieder beenden: public void shutdown(); MapReduce Framework – Aufgabe 4 6 – 27 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 28 Futures in Java – Anwendungsbeispiel Extrahieren von Daten ExecutorService Beispielklasse Extrahieren von Daten typische MapReduce-Anwendung public class FutureExample implements Callable { private int a, b; Statistiken, Data Mining Mustererkennung, Machine Learning Graph-Algorithmen public FutureExample(int a, int b) { this.a = a; this.b = b; } Eingabedaten h¨aufig in Form von Textzeilen public Integer call() throws Exception { return a * b; } Partitionierung von Eingabedaten problematisch: Zusammengeh¨ orige Daten k¨ onnen in unterschiedlichen Worker-Threads verarbeitet werden } Aufruf L¨osungsm¨ oglichkeiten: ExecutorService es = Executors.newSingleThreadExecutor(); FutureExample task = new FutureExample(4, 7); Future f = es.submit(task); [...] System.out.println("result: " + f.get()); ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 Beeinflussung der Partitionierung durch Eingabedaten Verwerfen unvollst¨andiger Datens¨atze, z. B. bei statistischen Auswertungen großer Datenmengen 6 – 29 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 Auffinden von Zeichenketten Regul¨are Ausdru¨cke in Java Einfache Methoden in Java.lang.String Finden konstanter Zeichenketten Regul¨are Ausdr¨ ucke mit java.util.regex.Pattern N¨ utzliche Teilausdr¨ ucke Vorw¨arts suchen ab bestimmter Position: 6 – 30 Beliebiges Zeichen: . Anfang des Strings: ^ String-Ende: $ Wiederholung: * → beliebig oft, + → mindestens einmal Zeichenauswahl: [abc] → a, b oder c Zeichenklassen: \s Leerzeichen, \d Ziffern public int indexOf(String str, int start); R¨ uckw¨arts suchen ab bestimmter Position: public int lastIndexOf(String str, int start); Operationen mit regul¨aren Ausdr¨ ucken: Beispiele: Test, ob regul¨arer Ausdruck anwendbar: ^Hallo // Hallo am Anfang des Strings welt.$ // welt gefolgt von beliebigem Zeichen am Stringende te[sx]+t // te, mindestens einmal s oder x, t public boolean matches(String regex); Aufteilen in Array anhand von regul¨arem Ausdruck: public String[] split(String regex, int limit); ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 31 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 32 Regul¨are Ausdru¨cke in Java Teilstrings extrahieren Vorkompilieren h¨aufig ben¨otigter Ausdr¨ ucke: Bei bekanntem Start- und End-Index: Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); public String substring(int start, int end); Ausgabe des Strings ab start bis end, ohne end selbst. Test, ob Ausdruck passt: Tipp: Zum Test ein Zeichen vor und nach dem gesuchten Teilbereich ausgeben lassen public boolean matches(); Position abfragen, wo ein Treffer gefunden wurde: Aufteilen nach regul¨arem Ausdruck: public int start(); String[] parts = input.split(regex, 2); Beispiel: if (parts.length() < 2) System.err.println("Not found"); if (m.matches()) { int pos = m.start(); ... } ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 String left = parts[0], right = parts[1]; 6 – 33 Weitere Informationen J. Dean, S. Ghemawat, MapReduce: Simplified Data Processing on Large Clusters, OSDI 2004 Proceedings, S. 137-150, http://www.usenix.org/events/osdi04/tech/dean.html Apache Hadoop http://hadoop.apache.org/ Hadoop SVN repository http://svn.apache.org/viewvc/hadoop/common/ ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 35 ¨ MW-Ubung (WS14/15) MapReduce Framework – Aufgabe 4 6 – 34