Hallo zusammen! In diesem Video gebe ich euch einen groben Überblick darüber, was euch in
Aufgabe 3 erwartet, sowie einige nützliche Tipps für die Implementierung in Java. Bitte
lest für die eine detaillierte Aufgabenbeschreibung das Aufgabenblatt. Zu den beiden großen Teilbereichen
HDFS und Docker gibt es zudem zusätzlich auch noch detailliertere extra Videos.
In der Aufgabe solltet ihr eine vereinfachte Variante des Hadoop Distributed File System,
kurz HDFS, implementieren. Die Metadaten der Dateien werden dabei getrennt vom
eigentlichen Inhalt gespeichert. Ein Klein dient als Schnittstelle zwischen Anwendung und HDFS.
Dazu implementiert ihr einen NameNode Server, der sich um die Verwaltung der Metadaten eures
Dateisystems kümmert. Euer NameNode Server verwaltet für jede Datei den Namen, die Gesamtgröße,
sowie die Liste aller Blöcke der Datei inklusive der Datenknoten, auf denen diese gespeichert sind.
Zudem verwaltet den NameNode die Leases für die Dateien, um sicherzustellen, dass jeweils
nur ein Client gleichzeitig eine Datei schreiben kann. Leases sollen sich dabei so verhalten,
dass sie selbstständig nach einer konfigurierbaren Zeitstunde ablaufen,
aber auch vom Client selbst verlängert und freigegeben werden können.
Der NameNode bietet dem Client zudem eine Handvoll Operationen an, wie z. B. das Anlegen und
Löschen von Dateien, sowie das Anzeigen oder Updaten der Metadaten einer Datei.
Zudem implementiert ihr den MWDFS Client, der die Schnittstelle zwischen Anwender und eurem
Dateisystem darstellt. Der Client wird wie in den anderen Aufgaben auch wieder über die Konsole
bedient. Er soll mindestens vier Operationen anbieten. Das Anzeigen aller Dateien in eurem
Dateisystem, das Hoch- bzw. Runterladen einer Datei und das Löschen einer Datei.
Der Client muss sich dabei natürlich um das Aufteilen der Datei in geeignete Blöcke kümmern
und soll Fehler wie z. B. ungültige Dateinamen oder nicht gefundene Dateien sinnvoll behandeln.
Im Pappverzeichnis findet ihr einen Skeleton für den Client, in dem die grundlegenden Funktionen,
wie die Konsole schon implementiert sind. Die Implementierung der Datenknoten wird
ebenfalls von uns im Pappverzeichnis zur Verfügung gestellt.
Für die 7.5 ECDS Variante der Übung müsst ihr zwei weitere Aufgabenteile bearbeiten.
Erstens die Replikation der Blöcke. Für eine verbesserte Ausfallsicherheit sollen die Blöcke
auf mehrere Knoten repliziert werden. Euer Client kann dafür den Replikationsfaktor einer
Datei festlegen, denn Namenote teilt einem Block dann dementsprechend mehrere Knoten zu.
Dazu müssen natürlich auch die Metadaten angepasst werden, um mehrere Knoten pro
Block überhaupt abbilden zu können. Bei einem Fehler beim Herunterladen der Datei kann der
Client nun erst die anderen Knoten probieren, anstatt dass er direkt abbricht.
Der zweite Teil für 7.5 ECDS ist die Zustandspersistierung des Namenotes.
Für den Fall, dass der Namenote neu gestartet wird, ist derzeit euer gesamtes Dateisystem
verloren, da die Daten nur im RAM liegen. Um das zu verhindern, soll der Namenote alle
wichtigen Daten persistent in einer Datei abspeichern. Beim Absturz oder Neustart des
Namenotes soll dieser dann den letzten Zustand aus dieser Datei wiederherstellen.
Die Implementierung der Persistierung soll dabei möglichst effizient sein. So ist es bei einem
großen Dateisystem zum Beispiel wenig sinnvoll, bei jeder Änderung alle Metadaten neu zu sichern.
Dann wäre euer Namenote recht schnell mit nichts anderem mehr beschäftigt.
Beim Wiederherstellen der Daten muss zudem darauf geachtet werden,
dass keine Inkonsistenzen auftreten. Zum Beispiel darf ein neu gestarteter Namenote
nicht einfach ein Lease vergeben, wenn es noch ein altes, aber noch gültiges Lease für diese Datei gibt.
Der letzte Aufgabenteil ist die Bereitstellung eures MWDFS als Docker Image in unserer OpenStack Cloud.
Dieser Teil ist dieses Semester aufgrund der verkürzten Semesterzeit optional.
Wir bieten euch aber natürlich trotzdem alle Materialien und Hilfestellungen an,
die ihr zur Bearbeitung dieser Aufgabe benötigt. Ihr soll dafür drei Docker Images erstellen.
Das erste ist ein generisches Java Image, welches einfach die Laufzeitumgebung zur
Verfügung stellt und als Grundlage für die anderen beiden Images dient.
Zudem gibt es jeweils ein Docker Image für den Namenote bzw. die Datanotes eures Dateisystems.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:06:31 Min
Aufnahmedatum
2020-12-11
Hochgeladen am
2020-12-11 18:48:58
Sprache
de-DE
Aufgabenbeschreibung und Hinweise zur Implementierung in Java