Wenn Sie noch nicht entschieden haben, würde ich Avro Schemata für Ihre Daten schreiben. Sobald das erledigt ist, ist die Wahl zwischen Avro Containerdateien und Parkett Dateien über so einfach wie Auslagern zB
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
für
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Das Parkett Format scheint ein wenig rechenintensiv auf das zu sein, Schreibseite - zB RAM für Pufferung und CPU für die Bestellung der Daten usw. erforderlich, aber es sollte die I/O-, Speicher- und Transferkosten reduzieren sowie effiziente Lesevorgänge ermöglichen, insbesondere mit SQL-ähnlichen Abfragen (zB Hive oder SparkSQL) die nur einen Teil der Spalten adressieren.
In einem Projekt kehrte ich von Parquet zu Avro-Containern zurück, weil das Schema zu umfangreich und verschachtelt war (abgeleitet von einigen ziemlich hierarchischen objektorientierten Klassen) und Tausende von Parquet-Spalten ergab. Im Gegenzug waren unsere Zeilengruppen sehr breit und flach, was bedeutete, dass es ewig dauerte, bis wir in der letzten Spalte jeder Gruppe eine kleine Anzahl von Zeilen verarbeiten konnten.
Ich hatte noch keine Gelegenheit, Parkett für normalere/gesundere Daten zu verwenden, aber ich verstehe, dass es, wenn es gut verwendet wird, erhebliche Leistungsverbesserungen ermöglicht.
Warten auf den Vergleich. Derzeit wählte ich Avro für mein Projekt als Parkett hat Probleme mit Bienenstock :) – Abhishek
@Abshinek, können Sie einige Informationen über die Kompatibilitätsprobleme mit Bienenstock und avro –
@EB Es sollte keine Probleme geben, wenn es sie gibt, würden sie sein erwähnt unter https://cwiki.apache.org/confluence/display/Hive/AvroSerDe –