Avro gegen Parkett

87

Ich plane, eines der Hadoop-Dateiformate für mein Hadoop-Projekt zu verwenden. Ich verstehe, dass Parkett effizient für spaltenbasierte Abfragen und avro für den vollständigen Scan ist oder wenn wir alle Spaltendaten benötigen!

Bevor ich fortfahre und eines der Dateiformate auswähle, möchte ich verstehen, welche Vor- und Nachteile eines gegenüber dem anderen hat. Kann mir jemand das in einfachen Worten erklären?

Abhishek
quelle

Antworten:

52

Wenn Sie sich noch nicht entschieden haben, würde ich Avro-Schemas für Ihre Daten schreiben. Sobald dies erledigt ist, ist die Auswahl zwischen Avro-Containerdateien und Parkettdateien ungefähr so ​​einfach wie das Austauschen, z.

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

zum

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

Das Parkettformat scheint auf der Schreibseite etwas rechenintensiver zu sein - z. B. RAM zum Puffern und CPU zum Bestellen der Daten usw. erforderlich, aber es sollte die E / A-, Speicher- und Übertragungskosten reduzieren sowie für Effizienz sorgen Liest insbesondere bei SQL-ähnlichen Abfragen (z. B. Hive oder SparkSQL), die nur einen Teil der Spalten adressieren.

In einem Projekt kehrte ich von Parkett zu Avro-Containern zurück, weil das Schema zu umfangreich und verschachtelt war (abgeleitet von einigen ziemlich hierarchischen objektorientierten Klassen) und zu Tausenden von Parkettspalten führte. Unsere Zeilengruppen waren wiederum sehr breit und flach, was bedeutete, dass es ewig dauerte, bis wir eine kleine Anzahl von Zeilen in der letzten Spalte jeder Gruppe verarbeiten konnten.

Ich hatte noch keine große Chance, Parkett für normalisierte / vernünftige Daten zu verwenden, aber ich verstehe, dass es bei guter Verwendung erhebliche Leistungsverbesserungen ermöglicht.

Dampfer25
quelle
2
Parkett unterstützt auch verschachtelte Datensätze / Sammlungen.
Tagar
@ Ruslan: Ja, es hat die verschachtelten Strukturen technisch unterstützt. Das Problem war die sehr hohe Anzahl von Spalten aufgrund einer umfassenden De-Normalisierung der Daten. Es hat funktioniert, aber es war sehr langsam.
Dampfer25
4
Ja, das Schreiben von Daten in Parkett ist teurer. Lesevorgänge sind umgekehrt, insbesondere wenn Ihre Abfragen normalerweise eine Teilmenge von Spalten lesen.
Tagar
4
Ich denke, Parkett ist für die meisten Anwendungsfälle geeignet, außer dass die Daten in derselben Spalte sehr unterschiedlich sind und immer in fast allen Spalten analysiert werden.
Rockie Yang
Apache Arrow unterstützt auch noch keine gemischte Verschachtelung (Listen mit Wörterbüchern oder Wörterbücher mit Listen). Wenn Sie also mit komplexer Verschachtelung in Parkett arbeiten möchten, stecken Sie in Spark, Hive usw. und solchen Tools fest, die beim Lesen und Schreiben von Parkett nicht auf Arrow angewiesen sind.
Josiah
48

Avro ist ein zeilenbasiertes Format. Wenn Sie die Daten als Ganzes abrufen möchten, können Sie Avro verwenden

Parkett ist ein spaltenbasiertes Format. Wenn Ihre Daten aus vielen Spalten bestehen, Sie jedoch an einer Teilmenge von Spalten interessiert sind, können Sie Parkett verwenden

HBase ist nützlich, wenn häufig Daten aktualisiert werden. Avro ist schnell im Abruf, Parkett ist viel schneller.

Aravind Krishnakumar
quelle
7
Bitte korrigieren Sie Ihre 2 letzten Sätze im letzten Absatz. Sie sind geradezu unverständlich.
Cbhihe
37

Avro

  • Weit verbreitet als Serialisierungsplattform
  • Zeilenbasiert, bietet ein kompaktes und schnelles Binärformat
  • Das Schema ist in der Datei codiert, sodass die Daten nicht markiert werden können
  • Dateien unterstützen die Blockkomprimierung und sind teilbar
  • Unterstützt die Schemaentwicklung

Parkett

  • Spaltenorientiertes Binärdateiformat
  • Verwendet den im Dremel-Dokument beschriebenen Algorithmus zum Vernichten und Zusammenstellen von Datensätzen
  • Jede Datendatei enthält die Werte für eine Reihe von Zeilen
  • Effizient in Bezug auf Festplatten-E / A, wenn bestimmte Spalten abgefragt werden müssen

Von der Auswahl eines HDFS-Datenspeicherformats - Avro vs. Parkett und mehr

frei
quelle
27

Sowohl Avro als auch Parquet sind "selbstbeschreibende" Speicherformate. Dies bedeutet, dass sowohl Daten, Metadateninformationen als auch Schemata beim Speichern von Daten in einer Datei eingebettet werden. Die Verwendung beider Speicherformate hängt vom Anwendungsfall ab. Drei Aspekte bilden die Grundlage, auf der Sie auswählen können, welches Format in Ihrem Fall optimal ist:

  1. Lese- / Schreibvorgang : Parkett ist ein spaltenbasiertes Dateiformat. Es unterstützt die Indizierung. Aus diesem Grund eignet es sich für einmalige und leseintensive, komplexe oder analytische Abfragen von Datenabfragen mit geringer Latenz. Dies wird im Allgemeinen von Endbenutzern / Datenwissenschaftlern verwendet.
    In der Zwischenzeit wird Avro als zeilenbasiertes Dateiformat am besten für schreibintensive Operationen verwendet. Dies wird im Allgemeinen von Dateningenieuren verwendet. Beide unterstützen Serialisierungs- und Komprimierungsformate, obwohl sie dies auf unterschiedliche Weise tun.

  2. Werkzeuge : Parkett passt gut zu Impala. (Impala ist eine MPB-RDBM-SQL-Abfrage-Engine (Massive Parallel Processing), die weiß, wie Daten verarbeitet werden, die sich in einer oder mehreren externen Speicher-Engines befinden.) Auch hier eignet sich Parquet gut für komplexe / interaktive Abfragen und schnelle (niedrige Latenz) ) gibt über Daten in HDFS aus. Dies wird von CDH (Cloudera Distribution Hadoop) unterstützt. Hadoop unterstützt die ORC-Formate (Optimized Row Columnar) von Apache (Auswahl hängt von der Hadoop-Distribution ab), während Avro am besten für die Spark-Verarbeitung geeignet ist.

  3. Schemaentwicklung : Das Entwickeln eines DB-Schemas bedeutet, die Struktur der DB, also ihre Daten und damit ihre Abfrageverarbeitung zu ändern.
    Sowohl Parkett als auch Avro unterstützen die Schemaentwicklung in unterschiedlichem Maße.
    Parkett eignet sich zum Anhängen von Vorgängen, z. B. zum Hinzufügen von Spalten, jedoch nicht zum Umbenennen von Spalten, es sei denn, das Lesen erfolgt über den Index.
    Avro eignet sich besser zum Anhängen, Löschen und generellen Mutieren von Spalten als Parkett. In der Vergangenheit hat Avro eine größere Auswahl an Möglichkeiten zur Schemaentwicklung als Parkett bereitgestellt, und obwohl die Fähigkeiten zur Schemaentwicklung tendenziell verschwimmen, glänzt Avro im Vergleich zu Parkett immer noch in diesem Bereich.

Aakash Aggarwal
quelle
5
Der Teil "Werkzeuge" ist etwas irreführend. Parkett wird von vielen anderen Frameworks wie Spark, Presto, Hive usw. effizient verwendet. Avro ist nicht spezifisch für Spark, sondern wird häufig als HDFS-Speicherformat und für Szenarien zur Nachrichtenübermittlung wie in Kafka verwendet.
Devrimbaris 8.
2
Aakash Aggarwal: Können Sie erklären, was Sie in Absatz 2 mit "Avro ist am besten für die Funkenverarbeitung geeignet" meinen? Wie von devrimbaris erwähnt, ist Parkett auch sehr gut in die Spark-Verarbeitungsumgebung integriert. o_O?!?
Cbhihe
11

Ihr Verständnis ist richtig. Tatsächlich sind wir während der Datenmigration in unserem DWH auf eine ähnliche Situation gestoßen. Wir haben Parkett gegenüber Avro gewählt, da die Festplattenersparnis fast doppelt so hoch war wie bei AVro. Außerdem war die Abfrageverarbeitungszeit viel besser als bei Avro. Aber ja, unsere Anfragen basierten auf Aggregation, spaltenbasierten Operationen usw., daher war Parkett vorhersehbar ein klarer Gewinner.

Wir verwenden Hive 0.12 von CDH Distribution. Sie haben erwähnt, dass Sie Probleme mit Hive + Parkett haben. Was sind das? Wir sind keinem begegnet.

Silver Blaze
quelle
3

Silver Blaze hat die Beschreibung anhand eines Anwendungsbeispiels gut formuliert und beschrieben, wie Parkett die beste Wahl für ihn war. Es ist sinnvoll, je nach Ihren Anforderungen übereinander zu denken. Ich stelle auch eine kurze Beschreibung verschiedener anderer Dateiformate zusammen mit einem Vergleich der Zeit-Raum-Komplexität vor. Hoffentlich hilft das.

Es gibt eine Reihe von Dateiformaten, die Sie in Hive verwenden können. Bemerkenswerte Erwähnungen sind AVRO, Parkett. RCFile & ORC. Es sind einige gute Dokumente online verfügbar, auf die Sie möglicherweise verweisen, wenn Sie die Leistung und Speicherplatznutzung dieser Dateiformate vergleichen möchten. Folgt einigen nützlichen Links, die Sie zum Laufen bringen.

Dieser Blog-Beitrag

Dieser Link von MapR [Parkett wird jedoch nicht diskutiert]

Dieser Link von Inquidia

Die oben angegebenen Links bringen Sie zum Laufen. Ich hoffe das beantwortet deine Frage.

Vielen Dank!

Rahul
quelle
0

Eine Beschreibung von Parkett finden Sie hier: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

Ich habe vor, sehr bald über Avro und einen Vergleich zwischen den beiden zu schreiben. Werde es hier einmal fertig posten.

Abhishek Jain
quelle
Warten auf den Vergleich. Derzeit habe ich Avro für mein Projekt ausgewählt, da Parkett Kompatibilitätsprobleme mit Bienenstock hat :)
Abhishek
1
@Abshinek, können Sie einige Informationen zu den Kompatibilitätsproblemen mit Hive und Avro
EB
@EB Es sollte keine Probleme geben, wenn es welche gibt, werden sie unter cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer am