1 - Verteilte Dateisysteme und Container-Betriebssystemvirtualisierung [ID:26338]
50 von 81 angezeigt

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.

Teil eines Kapitels:
Verteilte Dateisysteme und Container-Betriebssystemvirtualisierung

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen