Analysen über Hadoop lasen Datensätze Zeile für Zeile, sodass eine Abfrage, die ein einziges Gehalt benötigt, dennoch den gesamten Datensatz jedes Mitarbeiters zog, und heterogene Datensätze sich schlecht komprimieren ließen. Twitters eigene Datensätze waren sieben Ebenen tief verschachtelt mit über 80 Blattknoten.
Twitter und Cloudera bauten Parquet, ein quelloffenes spaltenorientiertes Speicherformat für Hadoop. Statt Zeilen schreibt es Spalten: alle Namen, dann alle Altersangaben, dann alle Gehälter. Seine große Leistung war das Aufteilen verschachtelter Daten in Spalten mithilfe von Googles Dremel-Record-Shredding-Algorithmus und einer gemeinsamen Kodierungsspezifikation.
Da eine Spalte einen einzigen Typ enthält, verbessern sich sowohl generische als auch typspezifische Komprimierung, und eine Abfrage-Engine überspringt das Laden von Spalten, die sie nicht benötigt. Automatische Wörterbuchkodierung plus Bit-Packing und Run-Length-Encoding verkleinern den Rest. Parquet bindet Nutzer an keine Serialisierungsbibliothek, sodass viele Engines es übernehmen.
Parquet 1.0 wurde im Juli 2013 von Mitwirkenden aus Twitter, Cloudera, Criteo, Berkeley AMPLab und Stripe veröffentlicht, und es lief bereits bei Twitter im Produktivbetrieb.
Spaltenweise speichern, damit Analysen überspringen, was sie nicht brauchen
Homogene Spaltenwerte lassen sich weit besser komprimieren als gemischte Zeilen, sodass Dateien viel kleiner werden.
Abfragen laden nur die Spalten, die sie benötigen, sodass I/O und Kosten stark sinken.
Das Aufteilen verschachtelter Daten über Dremel bedeutet, dass auch ein komplexes Schema in Spalten passt.
Die Framework-Unabhängigkeit ließ jede Engine es ohne Umschreiben übernehmen.
Wenn der Engpass das Lesen und Komprimieren ist, ändere das physische Layout, nicht die Logik: Homogene Werte zusammen zu speichern lässt das teure I/O schrumpfen und die Datei kostenlos kleiner werden.
Parquet 1.0 wurde im Juli 2013 ausgeliefert und wurde schnell zum Standard-Spaltenformat im gesamten Hadoop- und Spark-Ökosystem, dann in Data Lakes, Lakehouses und Cloud-Warehouses. Heute ist es eines der am breitesten unterstützten offenen Speicherformate und wird überall dort verwendet, wo Analysen schnelle, kostengünstige Scans breiter Tabellen benötigen.
DEN BELEGEN FOLGEN
Die Quellen
- Announcing Parquet 1.0: Columnar Storage for Hadoop Twitter Blog · web.archive.org ·
- Parquet Format Specification Apache Parquet · apache.googlesource.com