Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Hadoop aus IT-Operations-Sicht - Teil 1 (Hadoop-Grundlagen)
1. Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
Hadoop aus IT-Operations Sicht – Teil 1
Hadoop-Grundlagen
Brownbag am Freitag, den 26.07.2013
Daniel Bäurer
inovex GmbH
Systems Engineer
2. 22.05.14
Inhalt
● Was ist Hadoop?
● Die Basis von Hadoop – Common
● Die Basis von Hadoop – HDFS, NameNode und DataNode
● Das Programmiermodell MapReduce
● Das MapReduce Framework – JobTracker und TaskTracker
4. 22.05.14
Was ist Hadoop?
● Hadoop ist ein auf Java basierendes Framework.
● Hadoop ist die Basis für eine Vielzahl weiterer Software-Produkte
(„Hadoop Eco-System“).
● Hadoop ist für die Verarbeitung sehr großer Datenmengen
ausgelegt.
● Hadoop kann Daten und Rechenoperationen auf viele Rechner
verteilen.
● Hadoop kann mit wachsenden (schrumpfenden) Daten oder
Rechenoperationen skalieren.
● Zusammengefasst:
„Hadoop ist ein freies, Java-basiertes Open-Source-Framework für
die skalierbare und verteilte Verarbeitung großer Datenmengen auf
vielen Rechnern innerhalb eines Netzwerks.“
Wartala, Ramon: Hadoop - Zuverlässig, verteilte und skalierbare Big-Data-Anwendungen. München 2012, S. 21
5. 22.05.14
Die Basis von Hadoop – Common
HADOOP
HDFS
MapReduce
Flume
Sqoop
HCatalog
Hue
Hive
Pig
HBase
Zookeeper
Oozie
Whirr
Snappy
Mahout
Chukwa
Cloudera
HortonworksMapR
NameNode DataNode
JobTracker
TaskTracker
6. 22.05.14
Die Basis von Hadoop – Common
● Hadoop Common stellt Grundfunktionen bereit.
● Beispielsweise:
● Eine implementierungsneutrale Dateisystem-Schnittstelle.
● Eine RPC („Remote-Procedure-Call“) Schnittstelle zur
Kommunikation im Rechnerverbund (Cluster).
● Bibliotheken zur Serialisierung von Daten.
● Werkzeuge und Bibliotheken die von anderen Hadoop
Komponenten (oder Software-Produkten) genutzt werden.
8. 22.05.14
Die Basis von Hadoop – HDFS, NameNode und DataNode
Sammer, Eric: Hadoop Operations. Sebastopol 2012, S. 10
HDFS-Architektur
9. 22.05.14
Die Basis von Hadoop – HDFS
● HDFS („Hadoop Distributed File System“) ist ein skalierbares und
verteiltes Dateisystem.
● HDFS ist das Standard-Dateisystem von Hadoop.
● HDFS folgt in den wesentlichen Eigenschaften dem „Google File
System“:
● Der Ausfall von Knoten kann passieren und wird als „nicht
kritisch“ betrachtet.
● Das Hinzufügen von weiteren Knoten ist sehr einfach.
● Es werden sehr große Dateien gespeichert.
● Dateien werden nur einmal geschrieben aber häufig gelesen.
● Der Aufbau eines Clusters folgt dem Master-Slave-Prinzip.
● Die Speicherung von Dateien erfolgt blockorientiert.
10. 22.05.14
Die Basis von Hadoop – HDFS
● Die zu speichernden Dateien werden in Blöcke mit fester Größe
aufgeteilt.
● Die Blockgröße von HDFS beträgt standardmäßig 64 MB (kann
aber bis zu 1 GB konfiguriert werden).
● Aufgrund der Blockgrößen werden die Daten in größeren
zusammenhängenden Stücken auf die Platten geschrieben, was
die Schreib- und Leseoperationen positiv beeinflusst.
● Standardmäßig wird ein Block im HDFS dreifach, auf
unterschiedlichen Knoten, repliziert.
● Zusätzlich können Blöcke auch über Knoten in verschiedenen
Serverschränken verteilt werden („Rack-Awareness“).
11. 22.05.14
Die Basis von Hadoop – NameNode
● Der NameNode ist der Master im HDFS der über alle Metadaten
des Dateisystems verfügt.
● Der NameNode ist die zentrale Anlaufstelle wenn Lese- oder
Schreiboperationen im HDFS durchgeführt werden sollen.
● Der NameNode stellt sicher das Blöcke verteilt und repliziert
werden.
● Der NameNode kennt alle Verzeichnisse und Dateien.
● Der NameNode kennt weiterhin
● alle Aufteilungen Datei → Block
● alle Speicherorte Block → Knoten
● alle Repliken Block → Knoten
12. 22.05.14
Die Basis von Hadoop – NameNode
● Der NameNode hält alle HDFS-Metadaten im Speicher (RAM) vor
um sehr schnell etwaige Anfragen verarbeiten zu können.
● Die HDFS-Metadaten (Datei → Block) werden auf dem lokalen
System des NameNode persistiert (nicht aber Block → Knoten).
● Die Persistierung erfolgt ähnliche dem WAL-Prinzip („Write
Ahead Log“).
● Die Zusammenführung der „Write-Ahead-Logs“ zu einem
konsistenten Speicherabbild wird vom Secondary NameNode in
regelmäßigen Abständen durchgeführt.
● Der Secondary NameNode stellt lediglich eine Art „Housekeeper“
für den NameNode dar. Er kann nicht die Funktionen des
NameNodes übernehmen!
13. 22.05.14
Die Basis von Hadoop – DataNode
● Ein DataNode ist der Slave im HDFS der die ihm zugewiesenen
Blöcke verwaltet.
● Ein DateNode kennt die Blöcke die er vorhält, nicht aber zu
welcher Datei sie gehören.
● Ein DataNode verfügt über mehrere Festplatten die exklusiv für
das HDFS zum speichern der Blöcke verwendet werden.
● Ein DataNode ist zuständig für den Transport der Blöcke und
organisiert diesen dezentral.
● Ein DataNode sendet in regelmäßigen Abständen einen Block-
Report an den NameNode, woraus dieser die Metadaten Block →
Knoten herleitet.
● Ein DataNode sendet ebenfalls in regelmäßigen Abständen ein
Lebenszeichen („Heartbeat“) an den NameNode.
14. 22.05.14
Die Basis von Hadoop – HDFS, NameNode und DataNode
Sammer, Eric: Hadoop Operations. Sebastopol 2012, S. 12
HDFS-Leseoperation
15. 22.05.14
Die Basis von Hadoop – HDFS, NameNode und DataNode
Sammer, Eric: Hadoop Operations. Sebastopol 2012, S. 14
HDFS-Schreiboperation
16. 22.05.14
Die Basis von Hadoop – NameNode
Sammer, Eric: Hadoop Operations. Sebastopol 2012, S. 16
Secondary NameNode „Housekeeping“
18. 22.05.14
Das Programmiermodell MapReduce
● MapReduce ist ein von Google entwickeltes Programmiermodell,
dass aus den Funktionen map() und reduce() Funktionaler
Sprachen inspiriert wurde.
● Hierbei wird der Funktion map() eine Funktion als Parameter
übergeben, die auf alle Werte einer Liste angewandt wird und als
Resultat eine Liste zurück gibt.
● Die reduce()-Funktion wiederum erhält diese aus der map()-
Funktion resultierenden Liste als Parameter und reduziert diese
anhand einer gegebenen Funktion auf einen Wert.
● Python-Beispiel:
>>> def f(x): return x+x
>>> def g(x,y): return x+y
>>> map(f, [1,2,3,4])
>>> [2,4,6,8]
>>> reduce(g, map(f, [1,2,3,4]))
>>> 20
19. 22.05.14
Das Programmiermodell MapReduce
● Beim MapReduce-Programmiermodell entspricht die Map-Funktion
der Funktion, die der map()-Funktion Funktionaler Sprachen
übergeben wird. Die Reduce-Funktion von MapReduce legt die Art
der Aggregation fest.
● MapReduce-Definition:
Map: K x V → (L x W)*
Reduce: L x W* → X*
● MapReduce-Konzept:
● In der ersten Phase (Map) werden einzelne Key/Value-Paare
verarbeitet die als Ergebnis eine Menge weiterer Key/Value-
Paare liefert (Zwischenergebnis).
● In der zweiten Phase (Reduce) werden die aus der ersten
Phase entstandenen Zwischenergebnisse anhand eines Keys
aggregiert und als Ergebnis zurückgeliefert.
20. 22.05.14
Das Programmiermodell MapReduce
● Beispiel „Häufigkeit von Wörtern in Dokumenten“:
● Die Map-Funktion erhält als Eingabe Dateien (K), deren Inhalt
(V) in Wörter aufgeteilt wird und somit die folgende Ausgabe
(Zwischenergebnis) liefert:
Key l L:∈ Wort
Value w W:∈ 1
● Die Reduce-Funktion aggregiert nun alle Values für einen Key l
L∈ und liefert das Ergebnis X für jeden l L∈ zurück.
● „Dies ist ein Beispiel ein Beispiel“
L: l1,w1 = Dies,1; l2,w2 = ist,1; l3,w3 = ein,1; l4,w4 =
Beispiel,1; l5,w5 = ein,1; l6,w6 = Beispiel,1;
X: Dies = 1; ist = 1; ein = 2; Beispiel = 2;
21. 22.05.14
Das Programmiermodell MapReduce
● Für was ist MapReduce geeignet?
● MapReduce ist für Aufgaben geeignet, deren Eingabemenge
sich in Teilstücke partitionieren lassen.
● Hierdurch können die Teilstücke unabhängig voneinander
bearbeitet werden.
● Weiterhin eignet sich MapReduce zur Verarbeitung von
unstrukturierten Eingangsdaten.
● Hierdurch können die Eingangsdaten mit verschiedenen
Aufgaben verarbeitet werden.
● Entsprechend ungeeignet für MapReduce sind Aufgaben,
deren Eingabemenge als Ganzes durch Abhängigkeiten nicht
partitionierbar sind.
23. 22.05.14
Das MapReduce Framework
● Neben dem Programmiermodell, das als MapReduce bezeichnet
wird, werden auch die spezifischen Implementierungen des
Software-Frameworks als MapReduce bezeichnet.
● Das MapReduce-Framework ist für die Verarbeitung großer und
verteilter Datenmengen ausgelegt.
● Es werden so genannte „Jobs“ entwickelt, die im wesentlichen aus
Map- und Reduce-Funktionen bestehen.
● Das Framework übernimmt hierbei sämtliche Aufgaben, von der
Verteilung der Jobs, der Parallelisierung und Planung der
Einzelschritte bis hin zur Fehlerbehandlung.
● MapReduce ist ein System das für die Stapelverarbeitung
(„Batch“) ausgelegt ist.
● MapReduce verfolgt die Strategie, Berechnung auf den Knoten
auszuführen auf denen die Daten liegen („Locality of Reference“).
24. 22.05.14
Das MapReduce Framework – JobTracker
● Der JobTracker ist der Master im MapReduce-Framework und
nimmt die Jobs der Clients an.
● Der JobTracker verfügt über die Informationen welche Slave-
Knoten aktiv sind und aktuell Tasks ausführen können.
● Der JobTracker plant Tasks und überwacht diese auf den
einzelnen Slave-Knoten (Worker).
● Equivalent zum HDFS NameNode werden sämtliche Tasks und
Job-Informationen im Speicher vorgehalten.
25. 22.05.14
Das MapReduce Framework – TaskTracker
● Ein TaskTracker ist der Slave im MapReduce-Framework und
verarbeitet die vom JobTracker im zugewiesenen Tasks.
● Ein TaskTracker meldet periodisch den Task-Status dem
JobTracker zurück.
● Ein TaskTracker läuft immer auf einem DataNode um die zu
verarbeitenden Daten lokal auslesen zu können.
● Ein TaskTracker bietet eine gewisse Anzahl an Map- und Reduce-
Slots an, die dem JobTracker gemeldet werden.
27. 22.05.14
Das MapReduce Framework – JobTracker und TaskTracker
Sammer, Eric: Hadoop Operations. Sebastopol 2012, S. 31
Reduce-Phase
28. 22.05.14
Vielen Dank für Ihre Aufmerksamkeit!
inovex GmbH
Pforzheim
Karlsruher Straße 71
D-75179 Pforzheim
München
Valentin-Linhof-Straße 2
D-81829 München
Köln
Schanzenstraße 6-20
D-51063 Köln