Hadoop - Department of Computer Science 4 Distributed Systems

Werbung
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
Herunterladen