Usare il client Beeline con Apache Hive

Informazioni su come usare Beeline per eseguire query Hive in HDInsight.

Beeline è un client Hive incluso nei nodi head del cluster HDInsight. Beeline usa JDBC per connettersi a HiveServer2, un servizio ospitato nel cluster HDInsight. È anche possibile usare Beeline per accedere in remoto a Hive in HDInsight tramite Internet. Nella tabella seguente vengono elencate le stringhe di connessione da usare con Beeline:

Esecuzione di Beeline da Parametri
Una connessione SSH a un nodo head o a un nodo perimetrale -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
All'esterno del cluster -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/hive2' -n admin -p password
Nota

Sostituire admin con l'account di accesso del cluster.

Sostituire password con la password dell'account di accesso del cluster.

Sostituire clustername con il nome del cluster HDInsight.

Prerequisiti

  • Un cluster Hadoop basato su Linux in HDInsight.

    Importante

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

  • Un client SSH o un client Beeline locale. La maggior parte dei passaggi di questo documento presuppongono che si usi Beeline da una sessione SSH al cluster. Per informazioni sull'esecuzione di Beeline dall'esterno del cluster, vedere la sezione sull'uso di Beeline in remoto.

    Per altre informazioni sull'uso di SSH, vedere Usare SSH con HDInsight.

Usare Beeline

  1. Quando si avvia Beeline, è necessario fornire una stringa di connessione per HiveServer2 nel cluster HDInsight. Per eseguire il comando dall'esterno del cluster, è necessario fornire anche il nome account (predefinito: admin) e la password dell'account di accesso del cluster. Usare la tabella seguente per trovare il formato della stringa di connessione e i parametri da usare:

    Esecuzione di Beeline da Parametri
    Una connessione SSH a un nodo head o a un nodo perimetrale -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    All'esterno del cluster -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/hive2' -n admin -p password

    Il comando seguente, ad esempio, può essere usato per avviare Beeline da una sessione SSH al cluster:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    

    Questo comando avvia il client Beeline ed esegue la connessione a HiveServer2 nel nodo head del cluster. Al termine dell'esecuzione del comando, si aprirà il prompt jdbc:hive2://headnodehost:10001/>.

  2. I comandi di Beeline iniziano di solito con un carattere !, ad esempio !help visualizza la Guida. Tuttavia il carattere ! può essere omesso per alcuni comandi. Ad esempio, anche help funziona.

    Il comando !sql consente di eseguire istruzioni HiveQL. HiveQL è comunque così diffuso da poter omettere il precedente !sql. Le due istruzioni seguenti sono equivalenti:

    !sql show tables;
    show tables;
    

    In un nuovo cluster viene elencata solo una tabella: hivesampletable.

  3. Usare il comando seguente per visualizzare lo schema di hivesampletable:

    describe hivesampletable;
    

    Questo comando restituisce le informazioni seguenti:

     +-----------------------+------------+----------+--+
     |       col_name        | data_type  | comment  |
     +-----------------------+------------+----------+--+
     | clientid              | string     |          |
     | querytime             | string     |          |
     | market                | string     |          |
     | deviceplatform        | string     |          |
     | devicemake            | string     |          |
     | devicemodel           | string     |          |
     | state                 | string     |          |
     | country               | string     |          |
     | querydwelltime        | double     |          |
     | sessionid             | bigint     |          |
     | sessionpagevieworder  | bigint     |          |
     +-----------------------+------------+----------+--+
    

    Tali informazioni descrivono le colonne nella tabella. Anche se è possibile eseguire alcune query su questi dati, verrà creata una nuova tabella per dimostrare come caricare i dati in Hive e applicare uno schema.

  4. Immettere le istruzioni seguenti per creare una tabella denominata log4jLogs usando i dati di esempio specificati con il cluster HDInsight:

    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 'wasb:///example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

    Di seguito sono elencate le istruzioni che eseguono queste azioni:

    • DROP TABLE: se la tabella esiste, viene eliminata.

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

    • ROW FORMAT: indica 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 dove sono archiviati i dati e in quale formato di file.

    • SELECT: seleziona un conteggio di tutte le righe in cui la colonna t4 include il valore [ERROR]. Questa query restituisce 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.

    L'output di questo comando è simile al testo seguente:

     INFO  : Tez session hasn't been created yet. Opening session
     INFO  :
    
     INFO  : Status: Running (Executing on YARN cluster with App id application_1443698635933_0001)
    
     INFO  : Map 1: -/-      Reducer 2: 0/1
     INFO  : Map 1: 0/1      Reducer 2: 0/1
     INFO  : Map 1: 0/1      Reducer 2: 0/1
     INFO  : Map 1: 0/1      Reducer 2: 0/1
     INFO  : Map 1: 0/1      Reducer 2: 0/1
     INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
     INFO  : Map 1: 0(+1)/1  Reducer 2: 0/1
     INFO  : Map 1: 1/1      Reducer 2: 0/1
     INFO  : Map 1: 1/1      Reducer 2: 0(+1)/1
     INFO  : Map 1: 1/1      Reducer 2: 1/1
     +----------+--------+--+
     |   sev    | count  |
     +----------+--------+--+
     | [ERROR]  | 3      |
     +----------+--------+--+
     1 row selected (47.351 seconds)
    
  5. Per uscire da Beeline, usare !exit.

Usare Beeline per eseguire un file HiveQL

Usare la procedura seguente per creare un file, quindi eseguirlo tramite Beeline.

  1. Usare il comando seguente per creare un file denominato query.hql:

    nano query.hql
    
  2. Usare il testo seguente come contenuto del file. Questa query crea una nuova tabella "interna" denominata errorLogs:

    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]' AND INPUT__FILE__NAME LIKE '%.log';
    

    Le istruzioni eseguono queste azioni:

    • CREATE TABLE IF NOT EXISTS: crea una tabella, se non esiste già. Poiché la parola chiave EXTERNAL non viene usata, questa istruzione crea una tabella interna. Le tabelle interne vengono archiviate nel data warehouse di Hive e sono totalmente gestite 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 tabella log4jLogs le righe contenenti [ERROR], poi inserisce i dati nella tabella errorLogs.

      Nota

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

  3. Per salvare il file usare Ctrl+_X, quindi immettere Y e infine premere INVIO.

  4. Usare il codice seguente per eseguire il file tramite Beeline:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http' -i query.hql
    
    Nota

    Il parametro -i avvia Beeline ed esegue le istruzioni nel file query.hql. Dopo il completamento della query, viene visualizzato il prompt jdbc:hive2://headnodehost:10001/>. È anche possibile eseguire un file usando il parametro -f, che chiude Beeline dopo il completamento della query.

  5. Per verificare che la tabella errorLogs sia stata creata, usare l'istruzione seguente per restituire tutte le righe da errorLogs:

    SELECT * from errorLogs;
    

    Dovrebbero essere restituite tre righe di dati, tutte contenenti [ERROR] nella colonna t4.

     +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
     | errorlogs.t1  | errorlogs.t2  | errorlogs.t3  | errorlogs.t4  | errorlogs.t5  | errorlogs.t6  | errorlogs.t7  |
     +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
     | 2012-02-03    | 18:35:34      | SampleClass0  | [ERROR]       | incorrect     | id            |               |
     | 2012-02-03    | 18:55:54      | SampleClass1  | [ERROR]       | incorrect     | id            |               |
     | 2012-02-03    | 19:25:27      | SampleClass4  | [ERROR]       | incorrect     | id            |               |
     +---------------+---------------+---------------+---------------+---------------+---------------+---------------+--+
     3 rows selected (1.538 seconds)
    

Usare Beeline da remoto

Se Beeline è installato localmente o se viene usato tramite un'immagine Docker, ad esempio sutoiku/beeline, è necessario usare i parametri seguenti:

  • Stringa di connessione: -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/hive2'

  • Nome account di accesso del cluster:-n admin

  • Password di accesso al cluster -p 'password'

Sostituire clustername nella stringa di connessione con il nome del cluster HDInsight.

Sostituire admin con il nome dell'account di accesso del cluster e password con la password per l'account di accesso del cluster.

Usare Beeline con Spark

Spark fornisce la propria implementazione di HiveServer2, spesso definita come server Spark Thrift. Questo servizio usa Spark SQL invece di Hive per risolvere le query e può offrire prestazioni migliori a seconda della query.

Per connettersi al server Spark Thrift di un cluster Spark in HDInsight, usare la porta 10002 invece della 10001. Ad esempio: beeline -u 'jdbc:hive2://headnodehost:10002/;transportMode=http'.

Importante

Il server Spark Thrift non è direttamente accessibile tramite Internet. È possibile connettersi solo da una sessione SSH o nella stessa rete virtuale di Azure del cluster HDInsight.

Passaggi successivi

Per informazioni più generali sull'uso di Hive con HDInsight, vedere il documento seguente:

Per altre informazioni su come usare Hadoop con HDInsight, vedere i documenti seguenti:

Se si usa Tez con Hive, vedere i documenti seguenti: