Middleware - Cloud Computing – Übung Tobias Distler, Klaus Stengel, Timo Hönig Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de Wintersemester 2010/11 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – 7–2 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Kurzeinführung Graphentheorie 7–3 Einführung Graphentheorie Graphen bestehen aus Knoten (englisch: Node, Vertex, Mehrzahl Vertices) Kanten (englisch: Edge), die Knoten verbinden Grad eines Knoten ist die Zahl der dort zusammenlaufenden Kanten Kante Knoten MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Kurzeinführung Graphentheorie 7–4 Einführung Graphentheorie Kanten können gerichtet oder ungerichtet sein Dementsprechend: Gerichter/ungerichteter Graph Gerichtete Kante verbindet Start-und Endknoten gerichtet MW-Übung (WS10/11) ungerichtet Graph-Algorithmen mit MapReduce – Kurzeinführung Graphentheorie 7–5 Einführung Graphentheorie Knoten sowie Kanten können gewichtet sein: Zusätzliche Wertung an jeweiliges Objekt als Attribut angefügt 3 2 4 2 Beispiel: Knoten sind verschiedene Städte Kanten stellen Wege zwischen Städten dar Gewichtung entspricht Weglänge MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Kurzeinführung Graphentheorie 7–6 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7–7 Algorithmus zum Finden von Cliquen Clique: Teilmenge von Knoten eines ungerichteten Graphen, die alle untereinander durch Kanten verbunden sind. Algorithmus zum Finden von Cliquen auf Basis des Artikels Graph Twiddling in a MapReduce World[Cohen09] Beispiel: 4 3 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7–8 Algorithmus zum Finden von Cliquen Aufgabe: Finden von Cliquen einer bestimmten Mindestgröße Lösungsansatz basiert auf Finden von Trägern: Finden von nichttrivialer Cliquen minimaler Größe: Dreiecke Vollständiger Graph mit n Knoten enthält n·(n−1)·(n−2) unterschiedliche 6 Dreiecke Jede Kante kommt in Dreiecken mindestens n − 2 mal vor Weniger häufig auftretende Kanten können nicht Teil eines vollständigen Teilgraphen (Clique) sein. 1 1 3 2 2 2 2 2 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7–9 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 10 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5+4 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 11 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5+4+3 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 12 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5+4+3+2 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 13 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5+4+3+2+1 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 14 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) 2 Kanten 5+4+3+2+1 =15 Kanten 5 0 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 15 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 4 5 0 1 2 1 4 3 3 MW-Übung (WS10/11) 4 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 16 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 4+3 5 0 2 4 3 MW-Übung (WS10/11) 1 1 3 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 17 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 4+3+2 5 2 4 1 1 3 MW-Übung (WS10/11) 0 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 18 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 4+3+2+1 5 0 1 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 19 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 4+3+2+1 3 0 1 4 3 MW-Übung (WS10/11) 1 2 3 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 20 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 4+3+2+1 3+2 0 1 1 4 2 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 21 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 4+3+2+1 3+2+1 0 1 1 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 22 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 4+3+2+1 3+2+1 2 0 1 1 4 2 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 23 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 3 MW-Übung (WS10/11) 0 1 4 4+3+2+1 3+2+1 2+1 1 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 24 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 4 5 0 1 1 3 MW-Übung (WS10/11) 4+3+2+1 3+2+1 2+1 1 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 25 Dreiecke im vollständigen Graph Vollständiger Graph mit n Knoten enthält: n(n−1) Kanten 2 n(n−1)(n−2) Dreiecke 6 Dreieck besteht aus 3 Kanten: (n − 2) Überlagerungen 5+4+3+2+1 =15 Kanten 5 4+3+2+1 3+2+1 2+1 1 =20 Dreiecke 0 1 4 20x3 =60 Kanten 60 / 15 = 4 3 MW-Übung (WS10/11) 2 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 26 Implementierung mittels MapReduce Implementierung in einzelnem MapReduce-Schritt nicht möglich Zerlegung in mehrere hintereinender ausgeführte Schritte Ausnutzen der Sortierphase zum Zusammenführen interessanter Daten Ablauf: Eingabe Ausgabe 6 Träger filtern 1 Grad der Knoten Gewichtete Knoten Gefundene Dreiecke 2 Kanten gewichten 5 Dreiecke prüfen Gewichtete Kanten Dreieckskandidaten 3 Kanten ausrichten 4 Dreiecke aufzählen Gerichteter Graph MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 27 Schritt 1: Grad der Knoten bestimmen Abzählen der Kanten, die mit jedem Knoten verbunden sind (→ Grad) Gewichtung der Knoten nach Grad 4 1 6 1 3 3 0 4 4 5 8 1 2 3 3 4 MW-Übung (WS10/11) 1 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 28 Schritt 2: Kanten gewichten Verwandlung in gerichteten Graph, mit Kanten in beide Richtungen Gewichtung der gerichteten Kanten nach Startknoten 4 1 6 1 3 3 0 4 4 5 8 1 2 3 3 4 MW-Übung (WS10/11) 1 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 29 Schritt 2: Kanten gewichten Verwandlung in gerichteten Graph, mit Kanten in beide Richtungen Gewichtung der gerichteten Kanten nach Startknoten 4 1 6 1 4 3 4 4 3 4 4 33 0 4 33 34 3 4 3 2 3 3 MW-Übung (WS10/11) 4 3 4 1 4 1 4 4 5 3 4 4 1 8 1 1 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 30 Schritt 3: Kanten ausrichten Entfernen von Kanten mit größerer Gewichtung ergibt gerichteten Graph Bei gleicher Gewichtung gewinnt Kante mit niedrigerem Startknoten Ausrichtung bestimmt Basis für Dreieckskandidaten 6 1 4 4 3 4 4 3 0 33 34 2 MW-Übung (WS10/11) 3 4 4 3 3 4 3 4 4 3 1 4 5 4 1 1 4 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 31 Schritt 3: Kanten ausrichten Entfernen von Kanten mit größerer Gewichtung ergibt gerichteten Graph Bei gleicher Gewichtung gewinnt Kante mit niedrigerem Startknoten Ausrichtung bestimmt Basis für Dreieckskandidaten 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 32 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 33 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 34 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 35 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 36 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 37 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 38 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 39 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 40 Schritt 4: Dreiecke aufzählen Aufzählen aller ausgehenden Verbindungen je Knoten Verbindung von Endpunkten ergibt mögliche Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 41 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 42 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 43 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 44 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 45 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 46 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 47 Schritt 5: Dreiecke prüfen Prüfen ob Dreieckskandidaten in Graphen existieren Nachweis durch Finden der in Schritt 4 ergänzten Kante im Graph Ausgabe aller bestätigten Dreiecke 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 48 Schritt 6: Träger filtern Zählen der Kantenüberlagerungen in der Menge der validierten Dreiecke Herausfiltern aller Kanten mit zu wenigen Überlagerungen Beispiel: n >= 2 entspricht Cliquen mit mindestens 4 Knoten 6 1 4 0 2 MW-Übung (WS10/11) 3 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 49 Schritt 6: Träger filtern Zählen der Kantenüberlagerungen in der Menge der validierten Dreiecke Herausfiltern aller Kanten mit zu wenigen Überlagerungen Beispiel: n >= 2 entspricht Cliquen mit mindestens 4 Knoten min=2 1 2 2 2 0 6 1 3 4 2 5 8 1 2 MW-Übung (WS10/11) 3 2 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 50 Schritt 6: Träger filtern Zählen der Kantenüberlagerungen in der Menge der validierten Dreiecke Herausfiltern aller Kanten mit zu wenigen Überlagerungen Beispiel: n >= 2 entspricht Cliquen mit mindestens 4 Knoten min=2 1 2 2 2 2 MW-Übung (WS10/11) 0 3 4 2 3 2 6 5 8 7 Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 51 Träger und Cliquen Algorithmus isoliert nur Träger: n − 2 Überlagerungen zwar notwendig, aber nicht hinreichend Nicht an der Clique beteiligte Kanten erhöhen Zahl der Überlagerungen an den Rändern Filtern von Kanten mit zu wenigen Überlagerungen reduziert Anzahl der Dreiecke im Graph Mehrfache Iteration notwendig, bis keine Kanten mehr wegfallen Beispiel: Bei suche nach Cliquen mit mindestens 5 Knoten (= 3 Überlappungen) Graph nicht leer 1 1 3 2 2 2 2 2 MW-Übung (WS10/11) Graph-Algorithmen mit MapReduce – Algorithmus zum Finden von Cliquen 7 – 52 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Überblick 7 – 53 Apache Hadoop Freie Implementierung eines MapReduce-Frameworks Besteht aus mehreren Teilprojekten Common: Gemeinsame Infrastruktur HDFS: Verteiltes Dateisystem MapReduce: MapReduce-Framework ZooKeeper: Koordinierungs-Dienst Implementierung in Java Bindings zu anderen Sprachen verfügbar (JNI) MW-Übung (WS10/11) Programmieren mit Hadoop – Überblick 7 – 54 Apache Hadoop API org.apache.hadoop.conf Verwaltung der Konfiguration org.apache.hadoop.fs Dateisystem-Abstraktion org.apache.hadoop.io Serialisierung und Deserialisierung von Daten org.apache.hadoop.mapreduce MapReduce-Framework org.apache.hadoop.util Verschiedene Hilfsklassen MW-Übung (WS10/11) Programmieren mit Hadoop – Überblick 7 – 55 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 56 Hadoop Jobs Klasse org.apache.hadoop.mapreduce.Job Speichert Informationen zum Ablauf eines Jobs Zur Ausführung benötigte Klassen (Mapper, Reducer...) Ein- und Ausgabedateien Jobspezifische Konfiguration Ausführungszustand Änderbare Einstellungen: Job-Bezeichnung void setJobName(String name) .jar-Datei mit benötigten Klassen void setJarByClass(Class cls) MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 57 Hadoop Jobs Änderbare Einstellungen (Fortsetzung): Klasse zur Verarbeitung des Eingabeformats void setInputFormatClass(Class cls) Klasse zum Schreiben der Ausgabedaten void setOutputFormatClass(Class cls) Mapper-Klasse und deren Key/Value-Ausgabeformate void setMapperClass ( Class cls ) void s e t M a p O u tp u K e y C l a s s ( Class cls ) void s e t M a p O u t p u t V a l u e C l a s s ( Class cls ) Reducer-Klasse und deren Key/Value-Ausgabeformate void setReducerClass ( Class cls ) void set Out put KeyC las s ( Class cls ) void s e t O u t p u tV a l u e C l a s s ( Class cls ) MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 58 Hadoop Jobs Beispiel: class MyJob extends Job { [...] public MyJob ( Configuration cfg , String name ) { super ( cfg , name ); setJarByClass ( getClass ()); s e t I n pu t F o r m a t C la s s ( EdgeInputFormat . class ); s e t O u t p u t F o r m a t C l a s s ( R ec or d Ou t pu tF o rm a t . class ); setMapperClass ( Map . class ); s e t M a p O u t p u t K e y C l a s s ( IntWritable . class ); s e t M a p O u t p u t V a l u e C l a s s ( LongWritable . class ); setReducerClass ( Reduce . class ); se tOu tput Key Cla ss ( NullWritable . class ); s e t O u tp u t V a l u e C la s s ( IntWritable . class ); } MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 59 Hadoop Jobs Beispiel (Fortsetzung): // class MyJob extends Job { public static class Map extends Mapper < NullWritable , Edge , IntWritable , LongWritable > { @Override public void map ( NullWritable k , Edge v , Context ctx ) { [...] } } public static class Reduce extends Reducer < IntWritable , LongWritable , NullWritable , IntWritable > { @Override public void reduce ( IntWritable k , Iterable < LongWritable > v , Context ctx ) { [...] } } } MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 60 Weitere Job-Einstellungen Konfigurationseinstellungen für Job abfragen/ändern Configuration getConfiguration() Manipulation von Zählern: Counters getCounters() Festlegen der Ein- und Ausgabedateien für Job: static FileInputFormat.setInputPaths(Job job, Path path); static FileOutputFormat.setOutputPath(Job job, Path path); Erfolgt indirekt über statische Methoden der verwendeten Klasse zur Formatierung der Ein- bzw. Ausgabe! MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 61 Job-Ausführung Starten des Jobs (asynchron!): void submit() Nach Start können Job-Parameter nicht mehr verändert werden! Statusabfrage: boolean isComplete() boolean isSuccessful() Warten auf Ende des Jobs: boolean waitForCompletion(boolean verbose) MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 62 Hadoop-Tools Java-Klasse org.apache.hadoop.util.Tool Interface mit Einstiegspunkt für eigene Hadoop-Anwendungen int run(String[] args) Java-Klasse org.apache.hadoop.util.ToolRunner Initialisierung des Frameworks Verarbeitung der Kommandozeile Starten des angegebenen Tools static int run(Configuration cfg, Tool t, String[] args) MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 63 Hadoop-Tools Beispiel: public class MyApp extends Configured implements Tool { public int run ( String [] args ) throws Exception { System . out . println (" Hello " + args [0] + "!"); System . out . println ( getConf (). get (" mycfg . setting ")); return 0; } public static void main ( String [] args ) throws Exception { int res = ToolRunner . run ( new Configuration () , new MyApp () , args ); System . exit ( res ); } } Aufruf: $ hadoop jar myapp . jar -D mycfg . setting = hi World Hello World ! hi MW-Übung (WS10/11) Programmieren mit Hadoop – Jobs und Tools 7 – 64 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – JAR-Dateien erstellen 7 – 65 JAR-Dateien erstellen Hadoop-Programme müssen als .jar-Dateien vorliegen Aufruf: $ hadoop jar myprogram.jar <parameter> .jar-Dateien werden im ZIP-Format gespeichert und enthalten Java-Klassendateien (.class) Meta-Informationen (META-INF/MANIFEST.MF) Manifest-Datei ermöglicht Definieren von Abhängigkeiten und Classpath Versionierung Festlegen der zu verwendenden main()-Methode MW-Übung (WS10/11) Programmieren mit Hadoop – JAR-Dateien erstellen 7 – 66 JAR-Dateien erstellen Beispiel für Manifest: Manifest - Version : 1.0 Main - Class : mw . MyApp Class - Path : auxlib . jar Direktes starten der .jar-Datei (Main-Class muss definiert sein): $ java -jar myapp.jar Erstellen eines JARs auf der Kommandozeile (siehe man jar): $ jar cfe myapp.jar mw.MyApp mw/ MW-Übung (WS10/11) Programmieren mit Hadoop – JAR-Dateien erstellen 7 – 67 JAR-Dateien mit Ant erstellen ant ist ein Programm zum automatischen Bauen von Programmen (vgl. make) Zu erstellenden Objekte mittels XML-Datei (build.xml) definiert Enthält Modul zum bauen von .jar-Dateien: <? xml version ="1.0" encoding =" UTF -8" ? > < project default =" makejar " name =" jar example " > < target name =" makejar " > < jar destfile =" myapp . jar " > < manifest > < attribute name =" Main - Class " value =" mw . MyApp "/ > </ manifest > < fileset dir =" bin /" > < include name =" mw /**"/ > </ fileset > </ jar > </ target > </ project > Erzeugen der .jar-Datei durch Aufruf von ant MW-Übung (WS10/11) Programmieren mit Hadoop – JAR-Dateien erstellen 7 – 68 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 69 Ein-/Ausgabe (org.apache.hadoop.io) Objekte zur Bearbeitung durch MapReduce müssen in Dateien gespeichert werden können Zur Speicherung von Objekten muss bekannt sein, welche Daten wie abgelegt werden müssen Schnittstelle WritableComparable beschreibt Klassen, die serialisierbar und deserialisierbar sind untereinander vergleichbar sind Hadoop liefert Implementierung für elementare Datentypen mit: int → IntWritable long → LongWritable ... Platzhalter: NullWritable MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 70 Schnittstelle WritableComparable Serialisierung: Schreibt alle zur Rekonstruktion des Objekts in den Datenstrom out public void write(DataOutput out) Deserialisierung: Rekonstruiert Zustand des Objekts aus Datenstrom in public void readFields(DataInput in) Vergleichs-Operator: Vergleicht this mit x (siehe Java-Interface Comparable) public int compareTo(WritableComparable x) Hashing: Ermittelt Hash-Wert über Daten public int hashCode() MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 71 Schnittstelle WritableComparable Beispiel: public class MyData implements W r it a bl eC o mp a r a b l e { protected int node ; protected long weight ; public void write ( DataOutput out ) throws IOException { out . writeInt ( node ); out . writeLong ( weight ); } public void readFields ( DataInput in ) throws IOException { node = in . readInt (); weight = in . readLong (); } public int compareTo ( MyData x ) { return ( weight < x . weight ) ? -1 : (( weight == x . weight ) ? 0 : 1); } [...] MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 72 Schnittstelle WritableComparable hashCode()-Methode von Java garantiert keine konsistenten Hash-Werte bei unterschiedlichen Objekten, trotz gleichem Inhalt Wird jedoch von HashPartitionier zum Partitionieren nach Schlüssel für die Reduce-Phase verwendet → Eigene Implementierung basierend auf Inhalt notwendig Beispiel (Fortsetzung): [...] public boolean equals ( Object x ) { if (! ( o instanceof MyData )) return false ; MyData z = ( MyData ) x ; return ( z . node == node ) && ( z . weight == weight ); } public int hashCode () { return ( node * 2873) ^ ( int )( weight * 3782); } } MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 73 Ein-/Ausgabe Einlesen der Daten über InputFormat Ausgabe über OutputFormat Hadoop enthält bereits Klassen für verschiedene Ein-/Ausgabeformate: TextInputFormat: Einlesen aus Textdateien SequenceFileInputFormat: Hadoop-internes Binärformat ...OutputFormat entsprechend Für Übungsaufgabe vorgegeben: Lesen und schreiben von Binärdaten mit konstanter Satzlänge mw.cliquefind.io.RecordInputFormat mw.cliquefind.io.RecordOutputFormat InputFormat benötigt je abgeleiteten Typ eigene Spezialisierung, da beim Einlesen neue Instanzen erzeugt werden (via Reflection) MW-Übung (WS10/11) Programmieren mit Hadoop – Ein- und Ausgabe, Serialisierung 7 – 74 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Zusammenführen von Daten 7 – 75 Zusammenführen mit MapReduce Bei der Analyse von Daten häufig auftretendes Problem: Zusammenführen von Informationen nach bestimmtem Schlüssel Datenbanken: Join-Operation (SELECT * FROM x INNER JOIN y USING (c)) Möglichkeiten zur Implementierung: Map-side Join Reduce-side Join Zur Umsetzung beider Varianten notwendig: Einlesen mehrerer unterschiedlicher Eingabedateien Evtl. unterschiedliche Mapper je Datentyp MW-Übung (WS10/11) Programmieren mit Hadoop – Zusammenführen von Daten 7 – 76 Map-side Join Zusammenfassen von Daten während des Map-Vorgangs Mapper hält alle notwendigen Eingabedateien offen Durch Framework zugewiesener Datenbereich gibt zu suchende Schlüssel an Suche des jeweiligen Schlüssels in anderen Dateien Voraussetzung für effiziente Ausführung: Daten bereits nach Schlüssel vorsortiert (→ siehe z.B. Merge-Algorithmus) Mapper gibt fertig zusammengeführte Daten aus map() Input Aux. File 1 K Val3 K Val1 K Val2 K MW-Übung (WS10/11) Aux. File 2 Val1, Val2, Val3 Programmieren mit Hadoop – Zusammenführen von Daten 7 – 77 Reduce-side Join Nutzen des Sortiervorgangs zum zusammenfügen passender Schlüssel Sortierung werden Daten von unterschiedlichen Mappern zugeführt Mapper bilden unterschiedliche Eingabedaten auf gleichen Ausgabetyp für Sortierung und Reduce-Phase ab Sortierung/Grupierung führt gleiche Schlüssel und damit zusammengehörige Daten zu einer Gruppe zusammen Reducer erzeugt zusammengestzten Datensatz MW-Übung (WS10/11) Programmieren mit Hadoop – Zusammenführen von Daten 7 – 78 Reduce-side Join File 1 File 2 K Val2 K Val1 Map2 Map1 K Val1, -- K --, Val2 Sorting/Grouping K Val1, ---, Val2 Reduce K Val1, Val2 MW-Übung (WS10/11) Programmieren mit Hadoop – Zusammenführen von Daten 7 – 79 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 80 Sortierung, Gruppierung und Partitionierung MapReduce-Grundkonzept: Partitionierung Partitionierung Eingabe Ausgabe Map Sortierung & Gruppierung Reduce Problem: Sortierung nicht parallelisierbar Datenabhängige Partitionierung erlaubt paralleles Sortieren MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 81 Sortierung, Gruppierung und Partitionierung Sortierung: Reihenfolge der Schlüssel/Wert-Paare Gruppierung: Schlüssel, die beim Reduce zusammengefasst werden sollen Partitionierung: Verteilung der Schlüssel auf Reducer mittels Hash-Funktion Map Reduce Map Sort Combine Partition Map Sort Combine Partition Map Sort Combine Partition Sort Group Reduce Sort Group Reduce Optional MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 82 Sortierung, Gruppierung und Partitionierung Schnittstelle in Hadoop: Sortierung/Gruppierung: org.apache.hadoop.io.RawComparator, Achtung: arbeitet auf (binären) Rohdaten Partitionierung: org.apache.hadoop.mapreduce.Partitionier Bei Implementierung zu beachtende Eigenschaften: Sortierung gibt strengere oder gleichwertige Ordnung gegenüber Gruppierung vor Hash-Funktion im Partitionierier generiert für alle Schlüssel einer Gruppe gleichen Hash-Wert MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 83 RawComparator-Implementierung Klasse WritableComparator ermöglich Vergleich von Objekten, die die Schnittstelle implementieren WritableComparable Deserialisierung der Binärdaten und Zuführen zu compare() Ohne Überschreiben der compare()-Methode wird compareTo() der übergebenen Objekte verwendet Beispiel: public class Sorting extends W ri t ab le C om p ar a t o r { public Sorting () { super ( Edge . class , true ); } // S t a n d a r d i m p l e m e n t i e r u n g public int compare ( W r it ab l eC o mp ar a bl e a , W ri ta b le C om pa r ab l e b ) { return a . compareTo ( b ); } } MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 84 Partitioner-Implementierung Standard-Implementierung HashPartitioner verwendet hashCode()-Methode von Object zur Partitionierung Achtung: Standard-Implementierung von hashCode() nicht ausreichend, muss bei Implementierung von Writable-Schnittstelle überschrieben werden Beispiel: Kanten nach linkem Knoten gruppieren public class Partition extends Partitioner < Edge , Writable > { @Override public int getPartition ( Edge k , Writable v , int max ) { return ( k . getLeft (). hashCode () & Integer . MAX_VALUE ) % max ; } } MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 85 Combiner zur Beschleunigung Je nach Aufgabenstellung bereits teilweise Ausführung von Reduce-Schritt auch am Ende des Mappers möglich Voraussetzungen: Reduce-Schritt darf nicht von Vollständigkeit einer Gruppe abhängen Reducer muss weniger Ausgabedaten produzieren als Eingabedaten gelesen werden → Reduktion der zu sortierenden Datenmenge Implementierung in Hadoop mittels Combiner MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 86 Combiner zur Beschleunigung Schnittstelle des Combiners entsprecht der des Reducers Beispiel: Wörter zählen public class Combiner extends Reducer < Text , IntWritable , Text , IntWritable > { public void reduce ( Text k , Iterable < IntWritable > v , Context ctx ) throws IOException , I n t e r r u p t e d E x c e p t i o n { int count = 0; for ( IntWritable c : v ) { count += c . get (); } context . write (k , new IntWritable ( count )); } } Hier: Reducer identisch mit Combiner MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 87 Job-Konfiguration Festlegen von Combiner, Sorting, Grouping und Partitioner bei Job-Konfiguration Beispiel: // Partitoner s e t P a rt i t i o n e r C la s s ( Partition . class ); // Grouping s e t G r o u p i n g C o m p a r a t o r C l a s s ( Grouping . class ); // Sorting s e t S o r t C o m p a r a t o r C l a s s ( Sorting . class ); // Combiner setCombinerClass ( Combine . class ); MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 88 Hadoop Counter Hadoop ermöglicht Zählen von Ereignissen mittels org.apache.hadoop.mapreduce.Counters Von Hadoop selbst verwendet zum Anfertigen veschiedener Statistiken (z.B. Anzahl gelesener/geschriebener Bytes) Funktioniert auch bei verteilter Ausführung knotenübergreifend Erlauben nur erhöhen des Zählerstandes Identifizierug mittels Enums Enum-Klasse bildet Zählergruppe Enum-Einträge bildet einzelne Zähler der Gruppe MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 89 Hadoop Counter Beispiel: public class MyClass { public static enum MyGroup { VERTEX_COUNT , EDGE_COUNT } public void map ( Key k , Value v , Context ctx ) { Counter vc = ctx . getCounter ( MyGroup . VERTEX_COUNT ); Counter ec = ctx . getCounter ( MyGroup . EDGE_COUNT ); vc . increment (2); ec . increment (1); } public void printVertexCount ( Job job ) { Counters cts = job . getCounters (); Counter ct = cts . findCounter ( MyGroup . VERTEX_COUNT ); System . out . println (" Vertices : " + ct . getValue ()); } } MW-Übung (WS10/11) Programmieren mit Hadoop – MapReduce Erweiterungen 7 – 90 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 91 Ausführung von MapReduce-Jobs Hadoop unterstützt zwei verschiedene Ausführungsmodi Lokal Verteilt Standardmäßig lokale, sofortige Ausführung Verteilte Ausführung erfordert Dienste für Job-Verteilung und Ausführung Hadoop Filesystem (HDFS) Konfiguration (/etc/hadoop/conf) MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 92 Hadoop Dienste Jobtracker Verwaltet und verteilt MapReduce-Jobs Nur eine zentrale Instanz Tasktracker Zuständig für die Ausführung von Jobtracker zugewiesener Jobs Läuft auf jedem Knoten, der Jobs bearbeiten soll Namenode Verwaltet Dateien und deren Speicherorte im verteilten Dateisystem HDFS Eine zentrale, primäre Instanz Sekundärer Namenode ermöglicht schnellere Wiederherstellung Datanode Zuständig für die Speicherung von Datenblöcken des HDFS Läuft auf jedem Knoten, der Speicherplatz zur Verfügung stellen soll MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 93 Hadoop Dienste Kommunikation der Dienste untereinander erfolgt per HTTP Web-Server liefert HTML-Seiten zur Statusabfrage Status Jobtracker: http://hostname:50030/ Status Namenode/HDFS: http://hostname:50070/ Zugriff kann derzeit nicht beschränkt werden Betrieb daher nur in privatem Netz oder hinter entsprechender Firewall MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 94 Konfiguration Setzen von Konfigurationsparametern Auf der Kommandozeile: $ hadoop < command > -D dfs . data . dir =/ mnt / hadoop XML-Dateien: < configuration > < property > < name > dfs . data . dir </ name > < value >/ mnt / hadoop </ value > </ property > </ configuration > Verfügbare Konfigurationsdateien core-site.xml: Generelle Einstellungen hdfs-site.xml: HDFS-Spezifische Einstellungen mapred-site.xml: MapReduce Einstellungen MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 95 Konfiguration Typische Konfiguration: Ein Knoten für Jobtracker und Namenode Restliche Knoten: Gleichzeitig Tasktracker und Datanode Erlaubt Nutzung lokaler Datenspeicherung Namenode (core-site.xml) <name>fs.default.name</name> <value>hdfs://131.188.42.111/</value> Jobtracker (mapred-site.xml) <name>mapreduce.jobtracker.address</name> <value>131.188.42.111</value> Liste von Tasktracker/Datanode-Adressen in conf/slaves (kein XML!) 131.188.42.112 131.188.42.113 [...] MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 96 HDFS-Konfiguration hadoop.tmp.dir: Basisverzeichnis zur Speicherung lokaler Daten (core-site.xml) dfs.namenode.name.dir: Ort zur lokalen auf dem Namenode (hdfs-site.xml) Speicherung von Metadaten Standardwert: ${hadoop.tmp.dir}/dfs/name Muss vor Benutzung formatiert“ werden ” $ hadoop namenode -format dfs.datanode.data.dir zur lokalen Speicherung von HDFS Datenblöcken (hdfs-site.xml) Standardwert: ${hadoop.tmp.dir}/dfs/data dfs.replication: Gibt an, wie oft Datenblöcke redundant gespeichert werden sollen Standardwert: 3 MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 97 MapReduce-Konfiguration (mapred-site.xml) mapred.tasktracker.map.tasks.maximum, mapred.tasktracker.reduce.tasks.maximum: Maximale Anzahl parallel ablaufender Map/Reduce-Tasks je Knoten mapred.map.tasks, mapred.reduce.tasks: Hinweis an Partitionierer über die gewünschte Zahl von Teilen für Mapper/Reducer mapred.min.split.size, mapred.max.split.size: Grenzen für Partitionierer bezüglich Größe der pro Mapper/Reducer verarbeiteten Teile MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 98 Konfiguration aus API-Sicht Java-API: org.apache.hadoop.conf.Configuration Einstellungen können zur Laufzeit abgefragt und verändert werden: public void changeBlocksize ( Configuration mycfg ) { long sz = mycfg . getLong (" mapred . min . split . size "); mycfg . setLong (" mapred . min . split . size " , sz * 10); } Beliebige eigene Definitionen möglich: Configuration mycfg = new Configuration ( getConf ()); int ni = mycfg . getInt (" mytool . num_iterations " , 100); $ hadoop jar mytool . jar -D mytool . num_iteration s =500 MW-Übung (WS10/11) Programmieren mit Hadoop – Verteilte Ausführung 7 – 99 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Programmieren mit Hadoop – Dateisysteme in Hadoop 7 – 100 Dateisystem-Abstraktion Hadoop abstrahiert über verschiendene Dateisysteme“ ” URI-Schema zur Unterscheidung Unterstützt werden unter anderem: Lokales Dateisystem (file://...) HDFS (hdfs://...) Amazon S3 / Walrus (s3://..., s3n://...) HTTP (http://...) Zugriff über einheitliche Java-API Ein- und Ausgaben von MapReduce-Jobs können beliebige Dateisysteme direkt verwenden MW-Übung (WS10/11) Programmieren mit Hadoop – Dateisysteme in Hadoop 7 – 101 Dateisystem API (org.apache.hadoop.fs) Repräsentation von Pfaden mittels Path Operationen auf Objekte im Dateisystem mittels FileSystem Komplexere Operationen über statische Methoden in FileUtil Beispiel: Löschen einer Datei public void delete ( Configuration cfg , String name ) { try { Path p = new Path ( name ); FileSystem fs = p . getFileSystem ( cfg ); fs . delete (p , true ); // recursive delete } catch ( Exception e ) { System . err . println (" Delete failed for " + name ); } } MW-Übung (WS10/11) Programmieren mit Hadoop – Dateisysteme in Hadoop 7 – 102 Dateisystemzugriff mit FS Shell Hadoop bringt Werkzeug zum Zugriff auf Dateisysteme mit Aufruf mit: $ hadoop fs <command> ... Mögliche Unterbefehle: -ls <path>: Auflisten von Dateien -cp <src> <dst>: Kopieren von Dateien -getmerge <src> <dest>: Zusammenfügen und ins lokale Dateisystem kopieren -cat <src> <...>: Zusammenfügen und auf Standardausgabe ausgeben -rmr <path>: Rekursives löschen Siehe Hadoop FS Shell Guide MW-Übung (WS10/11) Programmieren mit Hadoop – Dateisysteme in Hadoop 7 – 103 Überblick Graph-Algorithmen mit MapReduce Kurzeinführung Graphentheorie Algorithmus zum Finden von Cliquen Programmieren mit Hadoop Überblick Jobs und Tools JAR-Dateien erstellen Ein- und Ausgabe, Serialisierung Zusammenführen von Daten MapReduce Erweiterungen Verteilte Ausführung Dateisysteme in Hadoop Aufgabe 4 MW-Übung (WS10/11) Aufgabe 4 – 7 – 104 Hadoop im CIP-Pool lokal starten Hadoop benötigt zur Ausführung die Umgebungsvariable JAVA HOME zur Angabe der zu verwendenden Java-Runtime Im CIP-Pool liegt diese unter /local/java Setzen der Umgebungsvariable (bash-Shell): $ export JAVA HOME=/local/java MW-Übung (WS10/11) Aufgabe 4 – 7 – 105 Visualisierung der Graphen Zur Visualisierung der Graphen ist das Program tulip im CIP installiert Die Binärdateien mit den Kanten können mit dem Werkzeug /proj/i4mw/pub/aufgabe4/edge2tlp in das Tulip-Format konvertiert werden Beispiel: $ cd / proj / i4mw / pub / aufgabe4 $ ./ edge2tlp small . bin ~/ small . tlp $ tulip ~/ small . tlp MW-Übung (WS10/11) Aufgabe 4 – 7 – 106 Start der verteilten Hadoop-Instanzen Gestarteten Hadoop-Dienste sind ohne besondere Vorkehrungen öffentlich erreichbar Vorgefertigtes Image und dazugehöriges Script zum Starten der notwendigen Dienste Benschränkt Zugriffe automatisch auf den Rechner, welche die Dienste gestartet hat Anpassung der Konfigurationsdateien durch Kopieren der Vorgabedateien in eigenes Verzeichnis Beispiel: $ cp -a / proj / i4mw / pub / aufgabe4 / defaultcfg mycfg $ vi mycfg / core - site . xml $ / proj / i4mw / pub / aufgabe4 / conf - hadoop mycfg / \ 131.188.42.1 131.188.42.2 [...] MW-Übung (WS10/11) Aufgabe 4 – 7 – 107 Verwendung der verteilten Hadoop-Instanzen Login auf den VMs als Benutzer root mit SSH-Key möglich SSH-Key erst ins eigene Home kopieren und chmod 600 ausführen Kopieren notwendiger .jar- und Datendateien Hadoop-Tools müssen als Benutzer hadoop gestartet werden, gegenüber lokaler Ausführung ansonsten keine Besonderheiten → Benutzerwechsel mit su Beispiel: $ $ $ $ $ scp -i root - ssh - key myapp . jar root@master :/ tmp / ssh -i root - ssh - key root@master su - hadoop cd / tmp hadoop jar myapp . jar [...] MW-Übung (WS10/11) Aufgabe 4 – 7 – 108 Literatur [Cohen09]: Jonathan Cohen. Graph Twiddling in a MapReduce World. In Computing in Science & Engineering Volume 11 Issue 4, S. 29-41, ISSN 1521-9615, IEEE Computer Society, 2009 http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5076317 (Kopie: /proj/i4mw/pub/aufgabe4/Cohen-Graph_Twiddling.pdf) Apache Hadoop Dokumentation http://hadoop.apache.org/common/docs/r0.20.2/index.html Apache Hadoop API Javadoc http://hadoop.apache.org/common/docs/r0.20.2/api/index.html MW-Übung (WS10/11) Aufgabe 4 – 7 – 109