Se non hai già deciso, vado avanti e scrivo schemi Avro per i tuoi dati. Una volta fatto, scegliere tra i file contenitore Avro e i file Parquet è semplice quanto lo scambio, ad es.
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
per
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
Il formato Parquet sembra essere un po 'più impegnativo dal punto di vista della scrittura, ad esempio, richiede RAM per il buffering e CPU per l'ordinazione dei dati, ecc., Ma dovrebbe ridurre i costi di I / O, archiviazione e trasferimento e rendere efficiente legge soprattutto con query di tipo SQL (ad esempio, Hive o SparkSQL) che indirizzano solo una parte delle colonne.
In un progetto, sono finito per tornare dai contenitori Parquet ad Avro perché lo schema era troppo ampio e nidificato (essendo derivato da alcune classi orientate agli oggetti abbastanza gerarchiche) e ha prodotto migliaia di colonne Parquet. A loro volta, i nostri gruppi di righe erano molto ampi e poco profondi, il che significava che ci volle un'eternità prima che potessimo elaborare un piccolo numero di righe nell'ultima colonna di ogni gruppo.
Non ho ancora avuto molte possibilità di utilizzare Parquet per dati più normalizzati / sani, ma capisco che se usato bene, consente miglioramenti significativi delle prestazioni.