Im Gegensatz zu jedem E/A-Subsystem enthält Hadoop auch eine Reihe von Primitiven. Diese primitiven Überlegungen, obwohl allgemeiner Natur, gehen natürlich auch mit dem Hadoop IO-System mit einer besonderen Konnotation einher. Hadoop verarbeitet mehrere Terabyte an Datensätzen; Eine besondere Betrachtung dieser Grundelemente vermittelt eine Vorstellung davon, wie Hadoop mit der Dateneingabe und -ausgabe umgeht. Dieser Artikel überfliegt diese Grundelemente schnell, um einen Überblick über das Hadoop-Eingabe-/Ausgabesystem zu geben.
Datenintegrität
Datenintegrität bedeutet, dass die Daten bei allen Vorgängen zum Speichern, Verarbeiten und Abrufen genau und konsistent bleiben sollten. Um sicherzustellen, dass während der Persistenz und Verarbeitung keine Daten verloren gehen oder beschädigt werden, hält Hadoop strenge Datenintegritätsbeschränkungen ein. Jeder Lese-/Schreibvorgang findet auf Festplatten statt, insbesondere über das Netzwerk, und ist fehleranfällig. Und die Datenmenge, die Hadoop verarbeitet, verschlimmert die Situation nur noch. Der übliche Weg, beschädigte Daten zu erkennen, sind Prüfsummen. Eine Prüfsumme wird berechnet, wenn Daten zum ersten Mal in das System eingehen, und während des Abrufprozesses über den Kanal gesendet. Die abrufende Seite berechnet die Prüfsumme erneut und vergleicht sie mit den empfangenen. Bei exakter Übereinstimmung gelten die Daten als fehlerfrei, andernfalls enthalten sie Fehler. Aber das Problem ist – was ist, wenn die selbst gesendete Prüfsumme korrupt ist? Dies ist höchst unwahrscheinlich, da es sich um kleine Daten handelt, aber keine unbestreitbare Möglichkeit. Die Verwendung der richtigen Hardware wie ECC-Speicher kann verwendet werden, um die Situation zu entschärfen.
Dies ist eine reine Erkennung. Um den Fehler zu korrigieren, wird daher eine andere Technik namens CRC (Cyclic Redundancy Check) verwendet.
Hadoop geht noch einen Schritt weiter und erstellt eine eindeutige Prüfsumme für alle 512 (Standard) Datenbytes. Da CRC-32 nur 4 Bytes umfasst, ist der Speicheraufwand kein Problem. Alle Daten, die in das System eingehen, werden von den Datenknoten überprüft, bevor sie zur Speicherung oder weiteren Verarbeitung weitergeleitet werden. An die Datanode-Pipeline gesendete Daten werden durch Prüfsummen verifiziert, und jede gefundene Beschädigung wird dem Client sofort mit ChecksumException gemeldet . Der vom Datenknoten gelesene Client durchläuft ebenfalls denselben Drill. Die Datenknoten unterhalten ein Protokoll der Prüfsummenverifizierung, um den verifizierten Block zu verfolgen. Das Protokoll wird durch den Datenknoten aktualisiert, wenn er ein Blocküberprüfungs-Erfolgssignal vom Client empfängt. Diese Art von Statistiken hilft dabei, fehlerhafte Festplatten in Schach zu halten.
Abgesehen davon wird mit Hilfe von DataBlockScanner eine periodische Überprüfung des Blockspeichers durchgeführt läuft zusammen mit dem Datanode-Thread im Hintergrund. Dies schützt Daten vor Beschädigung in den physischen Speichermedien.
Hadoop verwaltet eine Kopie oder Repliken von Daten. Dies wird speziell verwendet, um Daten nach massiver Beschädigung wiederherzustellen. Sobald der Client beim Lesen eines Blocks einen Fehler erkennt, meldet er dem Datenknoten sofort den fehlerhaften Block vom Namensknoten, bevor er ChecksumException auslöst . Der Namensknoten markiert ihn dann als fehlerhaften Block und plant jeden weiteren Verweis auf den Block auf seine Kopien. Auf diese Weise wird das Replikat mit anderen Replikaten verwaltet und der markierte fehlerhafte Block wird aus dem System entfernt.
Für jede im LocalFileSystem von Hadoop erstellte Datei , eine versteckte Datei mit demselben Namen im selben Verzeichnis mit der Erweiterung .
Komprimierung
In Anbetracht der Datenmenge, mit der Hadoop umgeht, ist Komprimierung kein Luxus, sondern eine Voraussetzung. Es gibt viele offensichtliche Vorteile der von Hadoop richtig eingesetzten Dateikomprimierung. Es spart Speicheranforderungen und ist eine unverzichtbare Fähigkeit, um die Datenübertragung über das Netzwerk und Festplatten zu beschleunigen. Es gibt viele Tools, Techniken und Algorithmen, die häufig von Hadoop verwendet werden. Viele von ihnen sind sehr beliebt und wurden im Laufe der Jahrhunderte zur Dateikomprimierung verwendet. Beispielsweise werden häufig gzip, bzip2, LZO, zip usw. verwendet.
Serialisierung
Der Prozess, der strukturierte Objekte in Byteströme umwandelt, wird als Serialisierung bezeichnet . Dies ist insbesondere für die Datenübertragung über das Netzwerk oder das Persistieren von Rohdaten auf Festplatten erforderlich. Deserialisierung ist nur der umgekehrte Vorgang, bei dem ein Bytestrom in ein strukturiertes Objekt umgewandelt wird. Dies ist insbesondere für die Objektimplementierung der Rohbytes erforderlich. Daher ist es nicht verwunderlich, dass Distributed Computing dies in einigen unterschiedlichen Bereichen verwendet:Kommunikation zwischen Prozessen und Datenpersistenz.
Hadoop verwendet RPC (Remote Procedure Call), um die Kommunikation zwischen Prozessen zwischen Knoten zu ermöglichen. Daher verwendet das RPC-Protokoll den Prozess der Serialisierung und Deserialisierung, um eine Nachricht an den Bytestrom zu rendern und umgekehrt, und sendet sie über das Netzwerk. Der Prozess muss jedoch kompakt genug sein, um die Netzwerkbandbreite optimal zu nutzen, sowie schnell, interoperabel und flexibel, um Protokollaktualisierungen im Laufe der Zeit zu berücksichtigen.
Hadoop hat sein eigenes kompaktes und schnelles Serialisierungsformat, Writables , die MapReduce-Programme zum Generieren von Schlüsseln und Werttypen verwenden.
Datenstruktur von Dateien
Es gibt einige High-Level-Container, die die spezialisierte Datenstruktur in Hadoop ausarbeiten, um spezielle Datentypen aufzunehmen. Um beispielsweise ein Binärlog zu verwalten, muss die SequenceFile Container stellt die Datenstruktur bereit, um binäre Schlüssel-Wert-Paare beizubehalten. Wir können dann den Schlüssel verwenden, z. B. einen Zeitstempel, dargestellt durch LongWritable und Wert durch Beschreibbar , was sich auf die protokollierte Menge bezieht.
Es gibt einen weiteren Container, eine sortierte Ableitung von SequenceFile , genannt MapFile . Es bietet einen Index für bequeme Suchen nach Schlüssel.
Diese beiden Container sind interoperabel und können ineinander und voneinander konvertiert werden.
Schlussfolgerung
Dies ist nur ein kurzer Überblick über das Ein-/Ausgabesystem von Hadoop. Wir werden uns in den folgenden Artikeln mit vielen komplizierten Details befassen. Es ist nicht sehr schwierig, das Hadoop-Eingabe-/Ausgabesystem zu verstehen, wenn man ein grundlegendes Verständnis von E/A-Systemen im Allgemeinen hat. Hadoop hat einfach etwas mehr Saft hinzugefügt, um mit seiner verteilten Natur Schritt zu halten, die in einem riesigen Umfang von Daten funktioniert. Das ist alles.
Referenz
Weiß, Tom. Hadoop, The Definitive Guide, 2009 . O’Reilly Publications.