Video: Unveränderbarkeit - Daten / Audits und Zertifizierungen auf der Blockchain 2024
Wenn Sie eine Datei in HDFS speichern, zerlegt das System sie in einen Satz einzelner Blöcke und speichert diese Blöcke in verschiedenen Slave-Knoten im Hadoop-Cluster. Dies ist völlig normal, da alle Dateisysteme Dateien in Blöcke unterteilen, bevor sie auf der Festplatte gespeichert werden.
HDFS hat keine Ahnung (und kümmert sich nicht darum), was in der Datei gespeichert ist, also werden Rohdateien nicht in Übereinstimmung mit Regeln aufgeteilt, die wir Menschen verstehen würden. Menschen möchten zum Beispiel Datensatzgrenzen - die Zeilen, die zeigen, wo ein Datensatz beginnt und endet -, dass er respektiert wird.
HDFS ist sich oft nicht bewusst, dass der letzte Datensatz in einem Block nur ein Teilsatz sein kann, während der Rest des Inhalts in den folgenden Block verschoben wird. HDFS möchte nur sicherstellen, dass Dateien in Blöcke gleicher Größe aufgeteilt werden, die mit der vordefinierten Blockgröße für die Hadoop-Instanz übereinstimmen (es sei denn, ein benutzerdefinierter Wert für die zu speichernde Datei wurde eingegeben). In der vorherigen Abbildung ist diese Blockgröße 128 MB.
Nicht jede Datei, die Sie speichern müssen, ist ein genaues Vielfaches der Blockgröße Ihres Systems, so dass der endgültige Datenblock für eine Datei nur so viel Platz benötigt, wie benötigt wird. Im Fall der vorhergehenden Abbildung ist der letzte Datenblock 1 MB groß.
Das Konzept, eine Datei als eine Sammlung von Blöcken zu speichern, stimmt vollständig mit der Funktionsweise von Dateisystemen überein. Was aber bei HDFS anders ist, ist die Skalierung. Eine typische Blockgröße, die Sie unter Linux in einem Dateisystem sehen würden, ist 4 KB, während eine typische Blockgröße in Hadoop 128 MB beträgt. Dieser Wert ist konfigurierbar und kann sowohl als neuer Systemstandard als auch als benutzerdefinierter Wert für einzelne Dateien angepasst werden.
Hadoop wurde entwickelt, um Daten im Petabyte-Maßstab zu speichern, wo mögliche Einschränkungen beim Skalieren minimiert werden. Die hohe Blockgröße ist eine direkte Folge dieser Notwendigkeit, Daten in großem Maßstab zu speichern.
Zunächst einmal hat jeder in HDFS gespeicherte Datenblock seine eigenen Metadaten und muss von einem zentralen Server überwacht werden, damit Anwendungen, die auf eine bestimmte Datei zugreifen müssen, dorthin geleitet werden können, wo alle Blöcke der Datei gespeichert sind. Wenn die Blockgröße im Kilobyte-Bereich liegt, würden selbst geringe Datenmengen im Terabyte-Bereich den Metadatenserver mit zu vielen zu überprüfenden Blöcken überfordern.
Zweitens soll HDFS einen hohen Durchsatz ermöglichen, so dass die parallele Verarbeitung dieser großen Datensätze so schnell wie möglich erfolgt. Der Schlüssel zur Skalierbarkeit von Hadoop auf der Datenverarbeitungsseite ist und wird immer Parallelismus sein - die Fähigkeit, die einzelnen Blöcke dieser großen Dateien parallel zu verarbeiten.
Um eine effiziente Verarbeitung zu ermöglichen, muss eine Balance erstellt werden. Einerseits muss die Blockgröße groß genug sein, um die Ressourcen zu gewährleisten, die für eine einzelne Einheit der Datenverarbeitung reserviert sind (zum Beispiel eine Karte oder eine Aufgabe reduzieren). Auf der anderen Seite kann die Blockgröße nicht so groß sein, dass das System sehr lange darauf wartet, dass eine letzte Einheit der Datenverarbeitung ihre Arbeit beendet.
Diese beiden Überlegungen hängen offensichtlich von der Art der Arbeit an den Datenblöcken ab.