Parkett gegen ORC gegen ORC mit Snappy

87

Ich führe einige Tests mit den mit Hive verfügbaren Speicherformaten durch und verwende Parkett und ORC als Hauptoptionen. Ich habe ORC einmal mit Standardkomprimierung und einmal mit Snappy aufgenommen.

Ich habe viele Dokumente gelesen, in denen angegeben ist, dass Parkett im Vergleich zu ORC eine bessere zeitliche / räumliche Komplexität aufweist, aber meine Tests stehen im Gegensatz zu den Dokumenten, die ich durchlaufen habe.

Folgt einigen Details meiner Daten.

Table A- Text File Format- 2.5GB

Table B - ORC - 652MB

Table C - ORC with Snappy - 802MB

Table D - Parquet - 1.9 GB

Parkett war am schlimmsten, was die Komprimierung meines Tisches betrifft.

Meine Tests mit den obigen Tabellen ergaben folgende Ergebnisse.

Zeilenzähloperation

Text Format Cumulative CPU - 123.33 sec

Parquet Format Cumulative CPU - 204.92 sec

ORC Format Cumulative CPU - 119.99 sec 

ORC with SNAPPY Cumulative CPU - 107.05 sec

Summe einer Spaltenoperation

Text Format Cumulative CPU - 127.85 sec   

Parquet Format Cumulative CPU - 255.2 sec   

ORC Format Cumulative CPU - 120.48 sec   

ORC with SNAPPY Cumulative CPU - 98.27 sec

Durchschnitt einer Spaltenoperation

Text Format Cumulative CPU - 128.79 sec

Parquet Format Cumulative CPU - 211.73 sec    

ORC Format Cumulative CPU - 165.5 sec   

ORC with SNAPPY Cumulative CPU - 135.45 sec 

Auswählen von 4 Spalten aus einem bestimmten Bereich mit der where-Klausel

Text Format Cumulative CPU -  72.48 sec 

Parquet Format Cumulative CPU - 136.4 sec       

ORC Format Cumulative CPU - 96.63 sec 

ORC with SNAPPY Cumulative CPU - 82.05 sec 

Bedeutet das, dass ORC schneller ist als Parkett? Oder gibt es etwas, das ich tun kann, damit es mit der Antwortzeit der Abfrage und dem Komprimierungsverhältnis besser funktioniert?

Vielen Dank!

Rahul
quelle
1
Könnten Sie einen generischen Algorithmus für dieses Experiment verwenden? Es ist jedoch erforderlich, dieselben Daten zu verwenden. Es kann jedoch sehr nützlich sein, alles andere zu teilen, um dieselben Ergebnisse mit verschiedenen Datensätzen zu erzielen, um eine bessere Antwort zu erhalten oder um zu beweisen, dass Sie einen sehr guten Punkt haben und die Welt für immer zu verändern.
Mestre San
Haben Sie Funken-gegen-Tez-Ergebnisse mit Ork gegen Parkett? Nach dem, was ich gesehen habe, scheint tez schneller (dreimal schneller) zu sein, wenn das Ork-Format verwendet wird.
David H
+ 1 für Ihre schöne Benchmarking-Übersicht. Gibt es eine Möglichkeit, eine aktualisierte Version bereitzustellen, da sich einige technische Aspekte hinter den Kulissen geändert haben (z. B. wie in der Antwort von @jonathanChap beschrieben)?
Markus

Antworten:

52

Ich würde sagen, dass beide Formate ihre eigenen Vorteile haben.

Parkett ist möglicherweise besser, wenn Sie stark verschachtelte Daten haben, da es seine Elemente wie Google Dremel als Baum speichert ( siehe hier ).
Apache ORC ist möglicherweise besser, wenn Ihre Dateistruktur reduziert ist.

Und soweit ich weiß, unterstützt Parkett noch keine Indizes. ORC wird mit einem leichten Index geliefert und seit Hive 0.14 mit einem zusätzlichen Bloom-Filter, der hilfreich sein kann, um die Antwortzeit für Abfragen zu verbessern, insbesondere wenn es um Summenoperationen geht.

Die Parkett-Standardkomprimierung ist SNAPPY. Enthalten Tabelle A - B - C und D denselben Datensatz? Wenn ja, sieht es so aus, als ob etwas Schattiges daran ist, wenn es nur auf 1,9 GB komprimiert wird

PhanThomas
quelle
2
Tabelle A - Textdateiformat - Keine Komprimierung ......... Tabelle B - ORC-Dateiformat mit ZLIB-Komprimierung ......... Tabelle C - ORC mit Snappy ....... Tabelle D - Parkett mit Snappy ..... Ich habe an einer anderen Tabelle mit ~ 150 Spalten und ~ 160 GB Größe gearbeitet, um zu überprüfen, wie die Dateiformate dort funktionieren. Parkett benötigte 35 GB, um diese 160 GB Daten zu speichern, während ORC mit Snappy 39 GB benötigte. Die Komprimierung sah für Parkett im Vergleich zu dem fraglichen Test viel besser aus, aber die Leistung war wieder ähnlich. ORC glänzte hier mit Gleichmäßigkeit Bessere Leistung als ORC + SNAPPY-Kombination.
Rahul
1
Die Datenstruktur für meine Anwendungsfälle war flacher ohne Verschachtelung. Ich stimme Ihrem Indexierungskommentar zu Parquet vs ORC zu, und das macht tatsächlich einen Unterschied. Haben Sie Ergebnisse aus dem Leistungsvergleich beider? Das könnte helfen, mein Gewissen zu beruhigen, dass ich die Formate korrekt implementiere. :)
Rahul
Ich habe meinen Datensatz nie auf Parkett getestet, da der Index eine notwendige Anforderung war und wir auch eine flache Datenstruktur ohne verschachtelte Informationen haben. Was ich herausgefunden habe ist, dass Sie je nachdem, wo Sie Ihre Dateien speichern, einen anderen Streifen und eine andere Dateigröße benötigen, um die besten Ergebnisse zu erzielen. Wenn Sie Ihre Dateien dauerhaft in HDFS speichern, ist es besser, größere Dateien und Streifen zu haben. "set mapred.max.split.size = 4096000000" war der Parameter, mit dem ich die Dateigröße beeinflusste und die Streifengröße auf ihren Standardwert beließ. Mit dieser Einstellung gab es mir ungefähr 94% Abfrage- und Komprimierungsschub.
PhanThomas
Wenn Sie Ihre Dateien in Amazon S3 als Kühlhaus speichern möchten, haben mir eine viel kleinere Datei- und Streifengröße viel bessere Ergebnisse gebracht. Ich habe Dateien mit einer Größe von 40-60 MB verwendet, die einen einzelnen Stripe enthalten.
PhanThomas
44

Sie sehen dies, weil:

  • Hive hat einen vektorisierten ORC-Leser, aber keinen vektorisierten Parkettleser.

  • Spark hat einen vektorisierten Parkettleser und keinen vektorisierten ORC-Leser.

  • Spark funktioniert am besten mit Parkett, Hive am besten mit ORC.

Ich habe ähnliche Unterschiede beim Ausführen von ORC und Parkett mit Spark gesehen.

Vektorisierung bedeutet, dass Zeilen stapelweise dekodiert werden, wodurch die Speicherlokalität und die Cache-Auslastung erheblich verbessert werden.

(korrekt ab Hive 2.0 und Spark 2.1)

jonathanChap
quelle
18
Ab 2.3.0 Funke hat einen vektorisiert ORC Leser: issues.apache.org/jira/browse/SPARK-16060
Steen
6
Hive 2.3.0 hat Parkettleser
Ruhong
Seit Spark 2.3 unterstützt Spark einen vektorisierten ORC-Reader spark.apache.org/docs/latest/sql-data-sources-orc.html
Kathryn Hart
10

Sowohl Parkett als auch ORC haben ihre eigenen Vor- und Nachteile. Aber ich versuche einfach, einer einfachen Faustregel zu folgen: "Wie verschachtelt sind Ihre Daten und wie viele Spalten sind vorhanden?" . Wenn Sie dem Google Dremel folgen , können Sie herausfinden, wie Parkett gestaltet ist. Sie verwenden eine hierarchische baumartige Struktur zum Speichern von Daten. Je mehr der Baum tiefer nistet.

Aber ORC ist für eine abgeflachte Dateispeicher konzipiert. Wenn Ihre Daten also mit weniger Spalten abgeflacht sind, können Sie sich für ORC entscheiden. Andernfalls ist Parkett für Sie in Ordnung. Die Komprimierung von abgeflachten Daten funktioniert in ORC erstaunlich gut.

Wir haben ein Benchmarking mit einer größeren abgeflachten Datei durchgeführt, diese in Spark Dataframe konvertiert und in S3 sowohl im Parkett- als auch im ORC-Format gespeichert und mit ** Redshift-Spectrum ** abgefragt .

Size of the file in parquet: ~7.5 GB and took 7 minutes to write
Size of the file in ORC: ~7.1. GB and took 6 minutes to write
Query seems faster in ORC files.

In Kürze werden wir ein Benchmarking für verschachtelte Daten durchführen und die Ergebnisse hier aktualisieren.

james.bondu
quelle
6

Wir haben einige Benchmarks durchgeführt, um die verschiedenen Dateiformate (Avro, JSON, ORC und Parkett) in verschiedenen Anwendungsfällen zu vergleichen.

https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet

Die Daten sind alle öffentlich verfügbar und der Benchmark-Code ist Open Source unter:

https://github.com/apache/orc/tree/branch-1.4/java/bench

Owen O'Malley
quelle
5
Dies ist wirklich nützlich, aber es sollte einen Haftungsausschluss geben, dass @Owen für Horton Works funktioniert, das ursprünglich das ORC-Dateiformat entwickelt hat
Daniel Kats
1
Vielen Dank! Aber die zweite Verbindung ist unterbrochen. Können Sie es bitte korrigieren oder aus Ihrer Antwort entfernen?
Danilo Gomes
3

Beide haben ihre Vorteile. Wir verwenden Parkett bei der Zusammenarbeit mit Hive und Impala, wollten jedoch nur einige Vorteile von ORC gegenüber Parkett hervorheben: Bei Abfragen mit langer Laufzeit , wenn Hive ORC-Tabellen abfragt, wird GC etwa zehnmal seltener aufgerufen . Könnte für viele Projekte nichts sein, könnte aber für andere von entscheidender Bedeutung sein.

ORC benötigt auch viel weniger Zeit, wenn Sie nur wenige Spalten aus der Tabelle auswählen müssen. Einige andere Abfragen, insbesondere bei Joins, benötigen aufgrund der vektorisierten Abfrageausführung, die für Parkett nicht verfügbar ist, ebenfalls weniger Zeit

Außerdem ist die ORC-Komprimierung manchmal etwas zufällig, während die Parkettkomprimierung viel konsistenter ist. Es sieht so aus, als hätte die ORC-Tabelle viele Zahlenspalten - sie wird auch nicht komprimiert. Dies wirkt sich sowohl auf die zlib- als auch auf die bissige Komprimierung aus

Hasan Ammori
quelle