Kodierung, Komprimierung, Parquet und Hive
Auf dem CDH 5.14 Cluster habe ich einen Größenvergleich für Einfügungen mit Hive vs. Impala in eine Tabelle mit Parquet-Dateiformat durchgeführt. Ich hatte den Eindruck, da beide Dateiformate gleich sind, sollten sie sich ähnlich verhalten (mit Standard-Kompressionscodec), um ungefähr die gleiche Größe zu erhalten. Allerdings ist mir aufgefallen, dass die von Impala geschriebene Parquet-Datei viel kleiner ist als die von Hive geschriebene für die gleichen Eingabedaten.
So habe ich angefangen, mir die von Hive geschriebene Parquet-Datei anzusehen und bin auf Beobachtungen gestoßen, die tatsächlich geholfen haben, den Punkt zu verstehen, an dem vielleicht alle Anfänger auf eine Art Verwirrung über Kodierung vs. Komprimierung gestoßen sein sollten (hier bezogen auf Hive-Hdfs-Tabellen). D.h. Spezifischer Unterschied zwischen Kodierung und Komprimierung und wie Hive damit umgeht.
Was ich denke, ist der allgemeine Unterschied zwischen Kodierung und Komprimierung –
- Kodierung: Es ist mehr auf der Anwendungsebene, wo die Datendarstellung geändert wird. Die Kodierung kann auch den Platzbedarf minimieren, was eine Art Komprimierung darstellt.
- Komprimierung: Im Allgemeinen ist es die Technik, den Speicherplatz für gegebene Daten in Bytes zu reduzieren, unabhängig davon, ob die Daten bereits kodiert sind oder nicht.
Das oben Gesagte wird durch die folgende Beobachtung bestätigt.
- Erstellte Hive mit Parquet-Dateiformat.
- Insertierte einige Daten, die ca. 1 GB an Parquet-Dateien als Teil des Inserts erstellt hatten.
- Um einen Blick auf die Parquet-Datei zu werfen, kopierte ich die Datei von hdfs nach lokal, um sie zu dumpen (nur zur Info – es gibt auch Möglichkeiten, von hdfs zu dumpen). Dann validiert mit dem parquet-meta-Dienstprogramm, das die Parquet-Datei dumpen kann.
- ./parquet-.meta <Dateiname>