Articles

Codifica, compressione, Parquet e Hive

Sul cluster CDH 5.14, stavo facendo un confronto delle dimensioni per gli inserti fatti usando hive Vs impala a tabelle con formato file parquet. Avevo l’impressione che, essendo entrambi i formati di file uguali, dovrebbero avere un comportamento simile (con il codec di compressione predefinito) per risultare in circa la stessa dimensione. Tuttavia ho notato che – il file parquet scritto da Impala è molto più piccolo di quello scritto da hive per gli stessi dati di input.

Così ho iniziato a guardare il file parquet scritto da hive e mi sono imbattuto in osservazioni che in realtà hanno aiutato a capire il punto in cui forse tutti i principianti avrebbero dovuto incontrare una sorta di confusione sulla codifica Vs compressione (qui relativa a hive hdfs tabelle). Cioè la differenza specifica tra codifica e compressione e come hive opera su questo.

Cosa penso che in generale la differenza tra codifica e compressione sia –

  • Codifica: È più a livello di applicazione dove la rappresentazione dei dati viene cambiata. La codifica può anche minimizzare l’uso dello spazio che può darci una sorta di compressione.
  • Compressione: In generale è la tecnica per ridurre lo stoccaggio di dati dati in byte, indipendentemente dal fatto che i dati sottolineati siano già codificati o meno.

Il suddetto conferma con l’osservazione seguente.

  • Creato alveare con formato di file parquet.
  • Inserito alcuni dati che avevano creato circa 1GB di file parquet come parte dell’inserimento.
  • Per dare un’occhiata al file parquet, ho copiato il file da hdfs a locale per scaricarlo (solo per notare – ci sono modi per scaricare anche da hdfs). Poi ho convalidato usando l’utilità parquet-meta che può scaricare il file parquet.
  • ./parquet-meta < nome del file>

Estratto da parquet-meta dump
  • In cui mostra, ogni colonna è codificata con varie tecniche di codifica (valore di ENC) come Run length, Bit packed ecc (non discuteremo la codifica stessa). Tuttavia, il file parquet scritto da hive per impostazione predefinita non impiega alcuna compressione. La dimensione del file era di 1GB.

Poi il prossimo

  • Tabella troncata usata nel suddetto test.
  • Alla linea di comando hive(beeline) impostare le seguenti impostazioni che imposteranno esplicitamente il codec di compressione e forzeranno hive a comprimere il file parquet scritto da hive.

SET hive.exec.compress.output=true;

SET parquet.compression=SNAPPY

  • Ha inserito la stessa quantità di dati. Questa volta ha creato circa 350 MB di file di parquet.
  • Di nuovo copiato il file da hdfs a locale per scaricarlo usando l’utility parquet-meta.

Estratto da parquet-meta dump
  • Qui possiamo vedere che, mostra che il file è compresso con SNAPPY insieme alla codifica. Quando abilitiamo esplicitamente la compressione, ci sarà una sostanziale riduzione della dimensione del file parquet per la stessa quantità di dati come risultato della compressione.

Quindi l’osservazione è che la codifica e la compressione sono diverse e possono essere usate separatamente o insieme. Ho osservato che in hive (a partire da CDH 5.14), quando scriviamo su una tabella parquet, per impostazione predefinita utilizza solo la codifica e non la compressione. Per abilitare la compressione su hive, dobbiamo impostare esplicitamente su hive come segue.

SET hive.exec.compress.output=true;

SET parquet.compression=<Compression Codec>

Che poi risulterebbe in una dimensione quasi uguale a quella degli inserti di Impala (Impala di default fa sia codifica che compressione).

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *