Apache Hive
Cos'è Apache Hive?
Apache Hive è un software di data warehouse open-source progettato per leggere, scrivere e gestire grandi set di dati estratti dall'Apache Hadoop Distributed File System (HDFS), un componente del più ampio ecosistema Hadoop.
Grazie alla vasta documentazione e ai continui aggiornamenti, Apache Hive continua a migliorare l'elaborazione dei dati nel segno della facilità di accesso.
La storia di Apache Hive
Apache Hive è un progetto open-source creato da Joydeep Sen Sarma e Ashish Thusoo mentre lavoravano per Facebook. Nato inizialmente come sottoprogetto di Apache Hadoop, è poi diventato un progetto di primo livello a sé stante. Con le crescenti limitazioni poste dai lavori Hadoop e Map Reduce e con l'aumento delle dimensioni dei dati, passate da 10 GB al giorno nel 2006 a 1 TB e poi a 15 TB al giorno nel giro di pochi anni, gli ingegneri di Facebook non erano più in grado di gestire con facilità i lavori complessi; da qui, l'esigenza di creare Hive.
Apache Hive si prefiggeva di raggiungere due obiettivi: in primo luogo, creare un linguaggio dichiarativo basato su SQL che permettesse agli ingegneri di inserire i propri script e programmi quando SQL non era sufficiente e a gran parte del mondo dell'engineering (basato su competenze SQL) di utilizzare Hive riducendo al minimo le interruzioni e le necessità di riaddestramento.
L'altro obiettivo era fornire un archivio di metadati centralizzato (basato su Hadoop) di tutti i set di dati all'interno dell'organizzazione. Inizialmente sviluppato per Facebook, Apache Hive è oggi utilizzato e sviluppato anche da altre aziende, come ad esempio Netflix. Amazon mantiene un fork di Apache Hive in Amazon Elastic MapReduce su Amazon Web Services.
Quali sono le principali caratteristiche di Hive?
Apache Hive supporta l'analisi di grandi set di dati memorizzati nell'HDFS di Hadoop e in file system compatibili quali Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage e Alluxio.
Fornisce un linguaggio di query simile a SQL chiamato HiveQL con schema-on-read e converte in modo trasparente le query in lavori Apache Spark, MapReduce e Apache Tez. Di seguito vengono riportate altre caratteristiche di Hive:
- Funzioni per i dati di Hive che aiutano a elaborare e interrogare set di dati di grandi dimensioni. Alcune delle funzionalità fornite da queste funzioni includono, ad esempio, la manipolazione di stringhe, la manipolazione di date, la conversione di tipo, gli operatori condizionali e le funzioni matematiche.
- Archiviazione dei metadati in un sistema di gestione per database relazionali.
- Diversi tipi di archiviazione, come Parquet, testo semplice, RCFile, HBase, ORC e altri.
- Possibilità di operare su dati compressi archiviati nell'ecosistema Hadoop per mezzo di algoritmi.
- Funzioni definite dall'utente (UDF) integrate per manipolare date, stringhe e altri strumenti di estrazione dati. Hive supporta l'estensione dell'insieme delle UDF per gestire casi d'uso non supportati dalle funzioni integrate.
- Query tipo SQL (HiveQL), che vengono implicitamente convertite in lavori MapReduce, Tez o Spark.
Architettura di Apache Hive e componenti chiave
I componenti chiave dell'architettura di Apache Hive sono Hive Server 2, Hive Query Language (HQL), External Apache Hive Metastore e Hive Beeline Shell.
Hive Server 2
Hive Server 2 accetta le richieste in arrivo da utenti e applicazioni, crea un piano di esecuzione e genera automaticamente un lavoro YARN per elaborare le query SQL. Il server supporta anche l'ottimizzatore Hive e il compilatore Hive per snellire l'estrazione e l'elaborazione dei dati.
Hive Query Language
Consentendo l'implementazione di codice scritto in un linguaggio simile a SQL, Apache Hive elimina la necessità di ricorrere a lunghi blocchi di codice JavaScript per ordinare i dati non strutturati e consente agli utenti di effettuare query utilizzando istruzioni HQL integrate (HQL). Queste istruzioni possono essere utilizzate per navigare in grandi set di dati, perfezionare i risultati e condividere i dati in modo rapido ed economico.
Hive Metastore
Il metastore è il repository centrale dell'infrastruttura di Apache Hive dove vengono archiviati tutti i metadati di Hive. Nel metastore, i metadati possono anche essere formattati in tabelle e partizioni Hive per consentire il confronto dei dati su più database relazionali. Includono i nomi delle tabelle, i nomi delle colonne, i tipi di dati, le informazioni sulle partizioni e la posizione dei dati su HDFS.
Hive Beeline Shell
In linea con altri sistemi per la gestione di database (DBMS), Hive ha una propria interfaccia a riga di comando integrata, dove gli utenti possono eseguire istruzioni HQL. Inoltre, la shell di Hive esegue anche i driver JDBC e ODBC per Hive e può quindi condurre query da un'applicazione Open Database Connectivity o Java Database Connectivity.
Come funziona il software Apache Hive?
Hive Server 2 accetta le richieste in arrivo da utenti e applicazioni prima di creare un piano di esecuzione e genera automaticamente un lavoro YARN per elaborare le query SQL. Il lavoro YARN può essere generato come carico di lavoro MapReduce, Tez o Spark.
L'attività funzionerà quindi come un'applicazione distribuita in Hadoop. Una volta elaborata la query SQL, i risultati vengono restituiti all'utente finale o all'applicazione, oppure trasmessi all'HDFS.
Hive Metastore sfrutterà quindi un database relazionale come Postgres o MySQL per rendere persistenti questi metadati, mentre Hive Server 2 recupererà la struttura delle tabelle come parte della pianificazione delle query. In alcuni casi, le applicazioni possono anche interrogare il metastore come parte della loro elaborazione sottostante.
I carichi di lavoro Hive vengono quindi eseguiti in YARN, il gestore di risorse Hadoop, per fornire un ambiente di elaborazione in grado di eseguire lavori Hadoop. Questo ambiente di elaborazione consiste nella memoria e nella CPU allocate dai vari nodi worker nel cluster Hadoop.
YARN cercherà di sfruttare le informazioni sui metadati HDFS per garantire che l'elaborazione venga distribuita dove risiedono i dati necessari, con MapReduce, Tez, Spark oppure Hive può generare automaticamente il codice per le query SQL come lavori MapReduce, Tez o Spark.
Nonostante Hive abbia iniziato a sfruttare MapReduce solo di recente, nella maggior parte delle implementazioni di Cloudera Hadoop Hive sarà configurato per utilizzare MapReduce o talvolta Spark. Le distribuzioni di Hortonworks (HDP) hanno normalmente Tez come motore di esecuzione.
Quali sono i cinque diversi tipi di dati utilizzati da Apache Hive?
Grazie all'elaborazione batch, Apache Hive è in grado di estrarre e analizzare petabyte di dati in modo estremamente rapido ed efficiente, il che lo rende ideale non solo per l'elaborazione dei dati ma anche per l'esecuzione di query ad hoc.
Apache Hive gestisce cinque categorie di dati: numerici, data/ora, stringa, complessi e misti.
Dati di tipo numerico
Come si evince dal nome, si tratta di dati basati su numeri interi. Esempi di questi tipi di dati sono "TINYINT", "SMALLINT", "INT" e "BIGINT".
Dati di tipo data/ora
Questi tipi di dati consentono agli utenti di inserire un'ora e una data. Esempi di input accettati sono "TIMESTAMP", "DATE" e "INTERVALLO".
Dati di tipo stringa
Anche questo tipo di dati è molto semplice e consente di implementare un testo scritto, o "stringa", come dato da elaborare. Sono ad esempio dati di tipo di stringa "STRING", "VARCHAR" e "CHAR".
Dati di tipo complesso
I dati di tipo complesso sono tra i tipi di dati più avanzati. Registrano dati più elaborati e consistono in tipi come "STRUCT", "MAP", "ARRAY" e "UNION".
Dati di tipo misto
I tipi di dati che non rientrano in nessuna delle altre quattro categorie sono definiti dati di tipo misto e possono accettare input come "BOOLEAN" o "BINARY".
Come funziona Map Join in Hive Apache
Map Join è una funzione di Apache Hive impiegata per aumentare la velocità e l'efficienza di una query combinando, o meglio "unendo", i dati di due tabelle e bypassando le fasi Map-Reduce del processo.
Che cos'è un sistema di gestione per database relazionali (RDBMS) e come viene utilizzato da Apache Hive?
Un Relational Database Management System (RDBMS) è un modello di database che opera memorizzando i metadati in una struttura di tabelle basate su righe o colonne e che consente di collegare e confrontare diversi set di dati.
Utilizzando un RDBMS, Apache Hive garantisce che tutti i dati siano archiviati ed elaborati in modo sicuro, affidabile e accurato, grazie a funzionalità integrate quali la sicurezza basata sui ruoli e le comunicazioni crittografate che permettono solo determinati utenti di accedere alle informazioni estratte.
Qual è la differenza tra Apache Hive e un RDBMS tradizionale?
Ci sono alcune differenze fondamentali tra Apache Hive e un RDBMS:
- Le funzioni RDBMS operano su una tecnologia di lettura e scrittura multipla, mentre Hive lavora sulla tecnologia WORM (scrittura singola, lettura multipla).
- Hive si basa sul principio schema-on-read, il che significa che non c'è alcuna convalida, controllo o parsing dei dati, ma solo operazioni di copia/spostamento di file. I database tradizionali sono invece basati sul principio schema-on-write, che applica una regola a una tabella in fase di scrittura.
- Essendo basato su Hadoop, Hive deve rispettare le stesse restrizioni di Hadoop e MapReduce; altri RDBMS potrebbero non avere questo limite.
Apache Hive vs. Apache Spark
Apache Spark è un framework analitico progettato per l'elaborazione di grandi volumi di dati su diversi set di dati e offre una potente interfaccia utente in grado di supportare diversi linguaggi, da R a Python.
Hive fornisce un livello di astrazione che rappresenta i dati come tabelle con righe, colonne e tipi di dati da interrogare e analizzare tramite un'interfaccia SQL chiamata HiveQL. Apache Hive supporta le transazioni ACID con Hive LLAP. Le transazioni garantiscono una visione coerente dei dati in un ambiente in cui più utenti/processi accedono ai dati contemporaneamente per operazioni di creazione, lettura, aggiornamento e cancellazione (CRUD).
Databricks propone Delta Lake, che è simile a Hive LLAP perché fornisce garanzie transazionali ACID, ma che offre anche altri vantaggi per migliorare prestazioni e affidabilità nell'accesso ai dati. Spark SQL è il modulo di Apache Spark per interagire con dati strutturati rappresentati come tabelle con righe, colonne e tipi di dati.
Spark SQL è conforme a SQL 2003 e utilizza Apache Spark come motore distribuito per elaborare i dati. Oltre all'interfaccia Spark SQL, è possibile usare un'API DataFrames per interagire con i dati utilizzando Java, Scala, Python, inoltre R. Spark SQL è simile a HiveQL.
Entrambi utilizzano la sintassi ANSI SQL e la maggior parte delle funzioni di Hive può essere eseguita su Databricks. Ciò include le funzioni di Hive per la conversione e l'analisi di data e ora, le raccolte, la manipolazione delle stringhe, le operazioni matematiche e le funzioni condizionali.
Ci sono alcune funzioni specifiche di Hive che devono essere convertite in funzioni equivalenti di Spark SQL, o che non esistono in Spark SQL su Databricks. Tutta la sintassi HiveQL ANSI SQL funziona con Spark SQL su Databricks,
incluse le funzioni aggregate e analitiche ANSI SQL. Hive è ottimizzato per il formato di file Optimized Row Columnar (ORC) e supporta anche Parquet. Databricks è ottimizzato per Parquet e Delta, ma supporta anche ORC. Consigliamo sempre di utilizzare Delta, che usa il formato di file open-source Parquet.
Apache Hive vs. Presto
Creato dagli sviluppatori di Facebook, PrestoDB, più comunemente noto come Presto, è un motore di query SQL distribuito che consente agli utenti di elaborare e analizzare petabyte di dati a una velocità altissima. L'infrastruttura di Presto supporta l'integrazione di database relazionali e non relazionali, da MySQL e Teradata a MongoDB e Cassandra.