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. Di seguito sono riportate le più comuni stringhe di connessione utilizzate per connettersi a HDInsight da Beeline:

  • Utilizzo di Beeline da una connessione SSH a un nodo head o a un nodo perimetrale: -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
  • Utilizzo di Beeline in un client, connessione ad HDInsight tramite una rete virtuale di Azure: -u 'jdbc:hive2://<headnode-FQDN>:10001/;transportMode=http'
  • Utilizzo di Beeline in un client, connessione ad HDInsight tramite la rete Internet pubblica: -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.

Quando ci si connette al cluster tramite una rete virtuale, sostituire <headnode-FQDN> con il nome di dominio completo di un nodo head del cluster.

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:

    • Durante la connessione mediante la rete Internet pubblica, è necessario fornire il nome di account di accesso del cluster (impostazione predefinita admin) e la password. Ad esempio, l'uso di Beeline da un sistema client per connettersi all'indirizzo <clustername>.azurehdinsight.net. Questa connessione viene eseguita tramite la porta 443 e viene crittografata mediante SSL:

      beeline -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/hive2' -n admin -p password
      
    • Quando la connessione viene eseguita da una sessione SSH a un nodo head del cluster, è possibile connettersi all'indirizzo headnodehost sulla porta 10001:

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    • Quando la connessione viene eseguita tramite una rete virtuale di Azure, è necessario fornire il nome di dominio completo di un nodo head del cluster. Poiché questa connessione viene eseguita direttamente ai nodi del cluster, la connessione usa la porta 10001:

      beeline -u 'jdbc:hive2://<headnode-FQDN>:10001/;transportMode=http'
      
  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 in locale e si esegue la connessione tramite la rete Internet pubblica, 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.

Se Beeline è installato in locale e si esegue la connessione tramite una rete virtuale di Azure, usare i parametri seguenti:

  • Stringa di connessione: -u 'jdbc:hive2://<headnode-FQDN>:10001/;transportMode=http'

Per trovare il nome di dominio completo di un nodo head, usare le informazioni contenute nel documento Gestire i cluster HDInsight mediante l'API REST Ambari.

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: