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.
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.
quelle
Avro
Parkett
Von der Auswahl eines HDFS-Datenspeicherformats - Avro vs. Parkett und mehr
quelle
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:
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.
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.
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.
quelle
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.
quelle
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!
quelle
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.
quelle