Hive, come si è detto nelle lezioni precedenti, permette di lavorare comodamente su file collocati nel file system di
Hadoop. Sistemi di questo genere riescono a elaborare molte tipologie di file ma le differenze
tra di esse possono incidere di gran lunga su prestazioni e consumi di risorse. Su questo punto è importante avere
le idee chiare soprattutto perché, quando si definiscono tabelle nei database di Hive, devono essere specificati non solo i
tipi di dato dei campi ma anche la tipologia di file su cui la struttura dati poggerà.
Prima di vedere quali sono i formati che Hive può sfruttare è necessario fare un piccolo preambolo su tale argomento relativamente ai Big Data.
Formati di file per Big Data
Nei Big Data, trovano posto formati di file "tradizionali" come CSV, JSON e XML ma, a seconda dei progetti, anche formati audio,
immagini e via dicendo: proprio per questo si dice che Hadoop nasce per lavorare sia con dati strutturati sia non strutturati. Nell'ultimo
decennio si sono però sviluppati formati dedicati espressamente ai Big Data e Hive è in grado di padroneggiarli un po' tutti.
La scelta di un formato di file impatta in primo luogo sui seguenti tre aspetti:
- ottimizzazione delle prestazioni;
- occupazione di spazio con conseguente variazione di costi nei servizi di storage in Cloud;
- possibilità di evoluzione della struttura dei dati.
Ogni formato di file ha una particolare predisposizione nel condizionare in positivo uno o più di questi aspetti ma, come si
può immaginare, il formato universalmente ottimo in ogni situazione non esiste. A seconda delle caratteristiche e prospettive di ogni
aggregato di dati, dovremo saper scegliere la tipologia di file più adatta. Uno degli aspetti che va considerato per primo è se riteniamo di
avere bisogno di un immgazzinamento per righe o per colonne. Il primo, approccio, più tradizionale (pensiamo al formato CSV),
è ideale quando il grosso delle nostre analisi accederà a molti campi di un certo numero di righe. Il secondo, a colonne, permette un migliore
accesso alle colonne pertanto perfetto per elaborazioni che analizzeranno un gran numero di elementi appartenenti ad un set limitato di
colonne. Altro aspetto da considerare è la divisibilità dei file, quella proprietà che in inglese
viene identificata con il termine splitability. Visto che i Big Data lavorano con grandissime quantità di informazioni è spesso necessario suddividere i file
in blocchi da elaborare separatamente. Ciò è stato preso in considerazione ovunque nella creazione dei nuovi formati di file. Per fare un esempio
di file non "splittabili", possiamo pensare a JSON ed XML, nati per gestire scambi di dati del web. Questi tipi di file sono strutturati in modo che
l'elemento che si apre alla prima riga si chiude all'ultima pertanto non sono suddivisibili in più parti pena la perdita della loro validità.
Inoltre, i formati di file hanno diversi approcci alla compressione la quale, da un lato, li rende meno ingombranti e, dall'altro, comporta
costi in termini di elaborazione in quanto richiede una necessaria decompressione. Infine si deve pensare alla possibilità di
evoluzione della struttura dei dati. Se c'è o meno la possibilità che lo schema alla base dei nostri file possa cambiare è preferibile
rivolgersi ad alcuni formati piuttosto che ad altri.
Ora che abbiamo affrontato una panoramica delle caratteristiche dei file per Big Data, vediamo quali possono essere impiegati in Hive.
Quali formati di file si possono usare con Hive
Con Hive è possibile utilizzare i seguenti formati di file:
- file testuali: si tratta del formato di default che prevede l'uso di file di
testo semplici, strutturati a piacimento, leggibili per righe. Sono la forma di immagazzinamento di dati
più immediata e più facilmente consultabile e modificabile dall'essere umano pertanto altamente disponibile.
Molti dataset vengono distribuiti in formato testuale e così acquisiti da Hive sebbene poi talvolta convertiti in altri formati; - sequence file: sono file di natura binaria in cui i dati vengono inseriti in accoppiate
chiave/valore disposte in sequenza. Non contengono metadati al loro interno e supportano la compressione a blocchi. Più che per
la conservazione di dati sono spesso usati per lo scambio di informazioni tra fasi dello stesso processo (ad esempio, tra gli step
del MapReduce); - RC File: sono file binari dove gli elementi sono conservati come accoppiate chiave/valore. Sono nati
per ottimizzare lavori svolti su MapReduce, algoritmo primario nella tecnologia Hadoop per la quale hanno rappresentato il primo
formato con approccio colonnare. La sigla RC sta per row columnar in quanto questo formato riesce a trarre sia i vantaggi
dell'immagazzinamento per righe sia di quello per colonne. Questo approccio permetterà contemporaneamente di velocizzare il caricamento di dati e la
esecuzione di interrogazioni, evitando recuperi di colonne non necessarie. I limiti del RC vertono sulle prestazioni in scrittura non alte e
sulla invariabilità della struttura dei dati nella maggior parte dei tool che lo usano: tipicamente per variare lo schema di un file RC è
necessario riprocessarlo; - Avro: è un altro formato nato appositamente per Hadooop che minimizza lo spazio di archiviazione dei dati. All'interno di un file di questo
tipo esiste una porzione di intestazioni ed una di dati. Quella di intestazione è strutturata con JSON e specifica, tra l'altro, protocolli e tipi di dato impiegati nel file:
ciò rende i file Avro i più adatti in assoluto all'evoluzione della struttura interna del file. Inoltre si tratta di un formato "a righe", che supporta la compressione ed è
particolarmente adatto ad operazioni write-intensive facilitando le operazioni di scrittura; - ORC file: si tratta di Optimazed Row Columnar quindi una versione ottimizzata della concezione riga-colonna. Supporta i tipi di dato previsti da Hive,
prevede compressione a livello di blocco, permette letture concorrenti e stabilisce limiti al consumo di memoria nelle operazioni di lettura e scrittura.
Ha elevate prestazioni nelle operazioni di analisi ed è uno dei formati più adatti ad Hive; - Parquet: file di questo tipo sono molto utilizzati al giorno d'oggi in framework per Big Data. Hanno un approccio del tutto colonnare pertanto sono caratterizzati
da una buona compressione dei dati e prestazioni notevoli in fase di analisi. I file contengono metadati e le informazioni sono organizzate in blocchi ognuno dei quali
ha una struttura colonnare.
A questo punto abbiamo le informazioni necessarie per iniziare a progettare database per Hive, le cui tabelle saranno caratterizzate da formati scelti in base
alle considerazioni che abbiamo esposto in questa lezione.