Komprimieren von Daten in Hadoop

Die riesigen Datenmengen, die Realitäten in einem typischen Hadoop Einsatz machen Kompression eine Notwendigkeit sind. Die Datenkomprimierung sparen Sie auf jeden Fall sehr viel Stauraum und ist sicher, die Bewegung dieser Daten im gesamten Cluster zu beschleunigen. Es überrascht nicht, eine Anzahl von verfügbaren Komprimierungsverfahren, die so genannte Codecs, sind da draußen für Sie zu prüfen.

In einem Hadoop Einsatz, es zu tun Sie (möglicherweise) mit einer recht großen Anzahl von einzelnen Slave-Knoten von denen jede eine Anzahl von großen Plattenlaufwerke hat. Es ist nicht ungewöhnlich, dass ein einzelner Slave-Knoten nach oben von 45 TB von rohem Speicherplatz für HDFS zu haben.

Obwohl Hadoop Slave-Knoten kostengünstig sein sollen, sind sie nicht frei, und mit großen Datenmengen, die eine Tendenz zu steigenden Raten zu wachsen, Kompression ist eine offensichtliche Werkzeug extreme Datenmengen zu steuern.

Zunächst einige grundlegende Begriffe: A Codec, Das ist eine verkürzte Form von compressor /DezemberKompressoranlagen, ist die Technik (Software oder Hardware oder beides) zum Komprimieren und Dekomprimieren von Daten- es die Umsetzung einer Kompressions / Dekompressions-Algorithmus ist.

Sie müssen wissen, dass einige Codecs etwas namens teilbaren Kompression unterstützen und dass Codecs unterscheiden sich sowohl die Geschwindigkeit, mit der sie komprimieren und dekomprimieren Daten und das Ausmaß, in dem sie es zu komprimieren.

Spleißfähige Kompression ist ein wichtiger in einem Hadoop Kontext Konzept. Die Art und Weise Hadoop funktioniert ist, dass Dateien aufgeteilt werden, wenn sie sind größer als die Blockgröße Einstellung der Datei und einzelne Datei Splits können parallel von verschiedenen Mapper verarbeitet werden.

Bei den meisten Codecs, Textdatei Splits können nicht unabhängig von anderen Splits aus der gleichen Datei dekomprimiert werden, so dass diese Codecs werden gesagt, nicht spaltbaren sein, so MapReduce Verarbeitung ist auf einen einzelnen Mapper beschränkt.

Da die Datei nur als Ganzes dekomprimiert werden können, und nicht als Einzelteile auf Basis von Splits, kann es keine parallele Verarbeitung einer solchen Datei sein, und die Leistung könnte ein großer Hit nehmen, wie ein Job wartet eine einzelne Mapper mehrere Daten zu verarbeiten Blöcke, die unabhängig voneinander nicht dekomprimiert werden können.

Teilbaren Kompression ist nur ein Faktor für Textdateien. Bei Binärdateien Hadoop Kompressions-Codecs komprimieren Daten innerhalb eines binär codierten Behälter, je nach Dateityp (zum Beispiel ein SequenceFile, Avro oder ProtocolBuffer).

Apropos Leistung, gibt es eine Kosten (in Bezug auf die Verarbeitungsressourcen und Zeit) im Zusammenhang mit der Komprimierung von Daten, die auf Ihre Hadoop Cluster geschrieben wird.

Mit Computern, wie mit dem Leben, ist nichts frei. Wenn die Daten zu komprimieren, sind Austausch Sie Verarbeitungszyklen für Speicherplatz. Und wenn die Daten gelesen werden, gibt es eine Kosten im Zusammenhang mit der Daten als auch Dekomprimieren. Achten Sie darauf, die Vorteile der Speichereinsparungen gegen die zusätzliche Performance-Overhead zu wiegen.

Wenn die Eingabedatei komprimierte Daten zu einem MapReduce Auftrag enthält, die Zeit benötigt wird, dass die Daten von HDFS zu lesen wird reduziert und die Arbeitsleistung verbessert wird. Die Eingangsdaten werden automatisch dekomprimiert, wenn sie durch MapReduce gelesen.

Die Eingabedateierweiterung bestimmt, welche unterstützten Codec verwendet wird, um die Daten automatisch zu dekomprimieren. Zum Beispiel identifiziert eine Erweiterung .gz die Datei als gzip-komprimierte Datei.

Es kann auch nützlich sein, das Zwischenausgangs der Kartenphase in der MapReduce Verarbeitungsfluß zu komprimieren. Da Ausgang Map-Funktion auf die Festplatte geschrieben und über das Netzwerk an den Aufgaben reduzieren ausgeliefert, können die Ausgabe komprimiert zu erheblichen Leistungsverbesserungen führen.

Und wenn Sie möchten, für die zukünftige Verwendung der MapReduce Ausgabe als History-Dateien zu speichern, diese Daten zu komprimieren kann signifikant die Menge an benötigten Raum in HDFS reduzieren.

Es gibt viele verschiedene Komprimierungsalgorithmen und Werkzeugen, und ihre Eigenschaften und Stärken variieren. Die häufigste Kompromiss zwischen Kompressionsverhältnisse (das Ausmaß, in dem eine Datei komprimiert) und komprimieren / Geschwindigkeiten dekomprimieren. Der Hadoop-Framework unterstützt mehrere Codecs. Der Rahmen transparent komprimiert und dekomprimiert die meisten Ein- und Ausgabedateiformate.

Die folgende Liste zeigt einige gemeinsame Codecs, die von der Hadoop Framework unterstützt werden. Achten Sie darauf, um den Codec zu wählen, die am ehesten den Anforderungen Ihrer speziellen Anwendungsfall (zum Beispiel mit Workloads, wo die Geschwindigkeit der Verarbeitung wichtig ist, wählte einen Codec mit hoher Dekompression Geschwindigkeiten):

  • gzip: Ein Komprimierungsprogramm, das vom GNU-Projekt, gzip (Abkürzung für GNU zip) erzeugt komprimierte Dateien, die eine Erweiterung .gz haben angenommen wurde. Sie können den Befehl gunzip verwenden, um Dateien zu dekomprimieren, die durch eine Reihe von Komprimierungsprogramme erstellt wurden, einschließlich gzip.

  • Bzip2: Aus Usability-Sicht sind bzip2 und gzip ähnlich. Bzip2 erzeugt eine bessere Kompressionsrate als dies gzip, aber es ist viel langsamer. In der Tat, alle verfügbaren Kompressions-Codecs in Hadoop ist Bzip2 mit Abstand am langsamsten.

    Wenn Sie die Einrichtung eines Archivs, die Sie selten mit einer hohen Prämie abzufragen und Platz benötigen, dann vielleicht wäre Bzip2 eine Überlegung wert.

  • Bissig: Das Snappy-Codec von Google bietet bescheidene Kompressionsverhältnisse, aber schnelle Komprimierung und Dekomprimierung Geschwindigkeiten. (In der Tat hat es die schnellste Dekompression Geschwindigkeiten, die für Datensätze es sehr wünschenswert macht, die wahrscheinlich häufig abgefragt werden.)

    Das Snappy-Codec ist integriert in Hadoop Common, eine Reihe gemeinsamer Programme, die andere Hadoop Teilprojekte unterstützt. Sie können Snappy als Add-on für neuere Versionen von Hadoop verwenden, die Snappy-Codec-Unterstützung noch nicht zur Verfügung stellen.

  • LZO: Ähnlich wie Snappy, LZO (kurz für Lempel-Ziv-Oberhumer, das Trio von Computer-Wissenschaftlern, die mit dem Algorithmus kam) liefert bescheidene Verdichtungsverhältnisse, aber schnelle Komprimierung und Dekomprimierung Geschwindigkeiten. LZO ist unter der GNU Public License (GPL) lizenziert.

    LZO unterstützt spaltbaren Kompression, die die parallele Verarbeitung von komprimierten Textdatei Splits von Ihrem MapReduce Jobs ermöglicht. LZO braucht einen Index zu erstellen, wenn es eine Datei komprimiert, weil mit variabler Länge Kompressionsblöcken wird ein Index erforderlich, um den Mapper zu sagen, wo es die komprimierte Datei sicher aufteilen. LZO ist nur dann wirklich sinnvoll, wenn Sie Textdateien komprimiert werden muss.

Hadoop Codecs
CodecDateierweiterungTeilbaren?KompressionsgradKompressionsgeschwindigkeit
gzip.gzNeinMittelMittel
Bzip2.bz2jaHochLangsam
Bissig.bissigNeinMittelSchnell
LZO.lzoNein, es sei denn, indiziertMittelSchnell

Alle Kompressionsalgorithmen müssen Kompromisse zwischen dem Grad der Kompression und der Geschwindigkeit der Kompression machen, die sie erreichen können. Die Codecs, die aufgeführt sind bieten Ihnen eine gewisse Kontrolle über das, was das Gleichgewicht zwischen der Kompressionsrate und Geschwindigkeit bei der Komprimierungszeit sein sollte.

Zum Beispiel gzip können Sie die Geschwindigkeit der Kompression durch die Angabe einer negativen integer (oder Schlüsselwort) regeln, wobei -1 die schnellste Komprimierungsstufe anzeigt und -9 zeigt die langsamste Komprimierungsgrad. Der Standardkomprimierungsstufe ist -6.

Menü