Cosa sono Apache Hive e HiveQL in Azure HDInsight

Apache Hive è un sistema di data warehouse per Hadoop. Hive consente di eseguire attività di riepilogo, query e analisi dei dati. Le query di Hive sono scritte in HiveQL, linguaggio di query simile a SQL.

Hive consente di proiettare la struttura su dati principalmente non strutturati. Dopo aver definito la struttura, è possibile usare HiveQL per eseguire una query sui dati anche senza alcuna conoscenza di Java o MapReduce.

HDInsight offre diversi tipi di cluster ottimizzati per carichi di lavoro specifici. I tipi di cluster usati più di frequente per le query Hive sono i seguenti:

Come usare Hive

Consultare la tabella seguente per informazioni su come usare Hive con HDInsight:

Usare questo metodo se si vuole... ...una shell interattiva ...elaborazionebatch ...con questo sistema operativo cluster ...da questo sistema operativo client
Vista di Hive Linux Qualsiasi versione (basata su browser)
Client Beeline Linux Linux, Unix, Mac OS X o Windows
API REST   Linux o Windows* Linux, Unix, Mac OS X o Windows
HDInsight Tools per Visual Studio   Linux o Windows* Windows
Windows PowerShell   Linux o Windows* Windows
Importante

* Linux è l'unico sistema operativo utilizzato in HDInsight versione 3.4 o successiva. Per altre informazioni, vedere la sezione relativa al ritiro di HDInsight in Windows.

Se si usa un cluster HDInsight basato su Windows, è possibile usare la console Query dal browser o Desktop remoto per eseguire query Hive.

Informazioni di riferimento sul linguaggio HiveQL

Informazioni di riferimento sul linguaggio HiveQL sono disponibili nel manuale del linguaggio (https://cwiki.apache.org/confluence/display/Hive/LanguageManual).

Hive e la struttura dei dati

Hive è in grado di usare dati strutturati e semistrutturati. Ad esempio, file di testo in cui i campi sono delimitati da caratteri specifici. L'istruzione HiveQL seguente crea una tabella di dati delimitati da spazi:

CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';

Hive supporta inoltre serializzatori/deserializzatori personalizzati per dati complessi o strutturati in modo irregolare. Per altre informazioni, vedere l'articolo su come usare un serializzatore/deserializzatore JSON personalizzato con HDInsight.

Per altre informazioni sui formati di file supportati da Hive, vedere il manuale del linguaggio (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Confronto tra le tabelle interne ed esterne di Hive

Con Hive è possibile creare due tipi di tabelle:

  • Interna: i dati vengono archiviati nel data warehouse di Hive. Il data warehouse si trova in /hive/warehouse/ nella risorsa di archiviazione predefinita per il cluster.

    Usare tabelle interne quando:

    • I dati sono temporanei.
    • Si desidera che Hive gestisca il ciclo di vita della tabella e dei dati.
  • Interna: i dati vengono archiviati all'esterno del data warehouse. I dati possono essere archiviati in tutte le risorse di archiviazione accessibili dal cluster.

    Usare tabelle esterne quando:

    • I dati vengono usati anche all'esterno di Hive. Ad esempio, i file di dati vengono aggiornati da un altro processo (che non blocca i file).
    • I dati devono rimanere nel percorso sottostante, anche dopo l'eliminazione della tabella.
    • È necessario un percorso personalizzato, ad esempio un account di archiviazione non predefinito.
    • Un programma diverso da Hive gestisce il formato dei dati, il percorso e così via.

Per altre informazioni, vedere il post di blog Hive Internal and External Tables Intro (Introduzione alle tabelle interne ed esterne di Hive).

Funzioni definite dall'utente (UDF)

Hive può anche essere esteso tramite funzioni definite dall'utente (UDF), che consentono di implementare funzionalità o logica non facilmente modellate in HiveQL. Per un esempio sull'uso di funzioni definite dall'utente con Hive, vedere i documenti seguenti:

Dati di esempio

Hive in HDInsight include una tabella interna denominata hivesampletable. HDInsight offre inoltre set di dati di esempio che possono essere usati con Hive. Questi set di dati sono archiviati nelle directory /example/data e /HdiSamples. Queste directory si trovano nella risorsa di archiviazione predefinita per il cluster.

Query Hive di esempio

Le seguenti istruzioni di HiveQL creano colonne nel file /example/data/sample.log:

set hive.execution.engine=tez;
DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;

Nell'esempio precedente, le istruzioni HiveQL eseguono le azioni seguenti:

  • set hive.execution.engine=tez;: configura il motore di esecuzione per l'uso di Tez. L'uso di Tez invece di MapReduce offre un aumento delle prestazioni delle query. For more information on Tez, see the Use Apache Tez for improved performance section.

    Nota

    Questa istruzione è obbligatoria solo quando si usa un cluster HDInsight basato su Windows. Tez è il motore di esecuzione predefinito per HDInsight basato su Linux.

  • DROP TABLE: se la tabella esiste già, eliminarla.

  • CREATE EXTERNAL TABLE: crea una nuova tabella esterna in Hive. Le tabelle esterne archiviano solo la definizione della tabella in Hive. I dati rimangono nel percorso e nel formato originale.

  • ROW FORMAT: indica a Hive il modo in cui sono formattati i dati. In questo caso, i campi in ogni log sono separati da uno spazio.

  • STORED AS TEXTFILE LOCATION: indica a Hive dove sono archiviati i dati (la directory example/data) e che sono archiviati come testo. I dati possono essere contenuti in un file o distribuiti tra più file all'interno della directory.

  • SELECT: seleziona un conteggio di tutte le righe in cui la colonna t4 contiene il valore [ERROR]. L'istruzione restituisce un valore pari a 3, poiché sono presenti tre righe contenenti questo valore.

  • INPUT__FILE__NAME LIKE '%.log': Hive tenta di applicare lo schema a tutti i file della directory. In questo caso la directory contiene file che non corrispondono allo schema. Per evitare dati errati nei risultati, questa istruzione indica a Hive che devono essere restituiti dati solo da file che terminano con .log.

Nota

Usa le tabelle esterne se si prevede che i dati sottostanti verranno aggiornati da un'origine esterna. Ad esempio, un processo di caricamento dati automatizzato o un'operazione MapReduce.

L'eliminazione di una tabella esterna non comporta anche l'eliminazione dei dati. Viene eliminata solo la definizione della tabella.

Per creare una tabella interno anziché esterna, usare il codice HiveQL seguente:

set hive.execution.engine=tez;
CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]';

Di seguito sono elencate le istruzioni che eseguono queste azioni:

  • CREATE TABLE IF NOT EXISTS: se la tabella non esiste, crearla. Poiché non viene usata la parola chiave EXTERNAL, questa istruzione crea una tabella interna. La tabella viene archiviata nel data warehouse di Hive e gestita completamente da Hive.

  • STORED AS ORC: archivia i dati nel formato ORC, Optimized Row Columnar. ORC è un formato altamente ottimizzato ed efficiente per l'archiviazione di dati Hive.

  • INSERT OVERWRITE ... SELECT: seleziona dalla tabellalog4jLogs le righe contenenti [ERROR], quindi inserisce i dati nella tabella errorLogs.

Nota

A differenza delle tabelle esterne, se si elimina una tabella interna vengono eliminati anche i dati sottostanti.

Ottimizzare le prestazioni delle query di Hive

Apache Tez

Apache Tez è un framework che consente di eseguire applicazioni come Hive, che richiedono un uso elevato di dati, in modo molto più efficiente e scalabile. Tez è abilitata come impostazione predefinita per i cluster HDInsight basati su Linux.

Nota

Tez è attualmente disattivata per impostazione predefinita per i cluster HDInsight basati su Windows e deve essere abilitata. Per poter usufruire dei vantaggi di Tez, è necessario impostare il valore seguente per una query Hive:

set hive.execution.engine=tez;

Tez è il motore predefinito per i cluster HDInsight basati su Linux.

La documentazione sulla progettazione di Hive su Tez contiene le informazioni dettagliate sulle scelte di implementazione e l'ottimizzazione delle configurazioni.

Per facilitare il debug di processi eseguiti mediante Tez, HDInsight fornisce le interfacce utente Web seguenti che consentono di visualizzare i dettagli dei processi Tez:

Low Latency Analytical Processing (LLAP)

LLAP (o Live Long and Process) è una nuova funzionalità di Hive 2.0 che consente di mettere in cache le query in memoria. LLAP rende molto più veloci le query Hive, in alcuni casi fino a 26 volte più veloci rispetto a Hive 1.x.

HDInsight offre LLAP nel tipo di cluster Interactive Hive. Per altre informazioni, vedere il documento su come iniziare a usare Interactive Hive.

Processi di Hive e SQL Server Integration Services

È possibile usare SQL Server Integration Services (SSIS) per eseguire un processo Hive. Il Feature Pack di Azure per SSIS fornisce i seguenti componenti che funzionano con i processi Hive in HDInsight.

Altre informazioni sul Feature Pack di Azure per SSIS sono disponibili qui.

Passaggi successivi

Dopo avere appreso che cos'è Hive e come si usa con Hadoop in HDInsight, vedere i collegamenti seguenti per scoprire altri modi di usare Azure HDInsight.