Usare il client Apache Beeline con Apache Hive

Questo articolo descrive come usare il client Apache Beeline della riga di comando per creare ed eseguire query Apache Hive su una connessione SSH.

Sfondo

Beeline è un client Hive incluso nei nodi head del cluster HDInsight. Questo articolo descrive come usare questo strumento tramite esempi usando una query Hive e unfile HiveQL.

Per connettersi al client Beeline installato nel cluster HDInsight o installare Beeline in locale, seguire la guida per connettersi o installare Apache Beeline.

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. Gli esempi seguenti forniscono le stringhe di connessione più comuni usate per connettersi a HDInsight da Beeline.

Prerequisiti per gli esempi

  • Un cluster Hadoop in Azure HDInsight. Se è necessario un cluster, seguire la guida per creare un cluster HDInsight.

  • Si noti lo schema URI per l'archiviazione primaria del cluster. Ad esempio, wasb:// per Archiviazione di Azure, abfs:// per Azure Data Lake Storage Gen2 o adl:// per Azure Data Lake Storage Gen1. Se il trasferimento sicuro è abilitato per Archiviazione di Azure, l'URI è wasbs://. Per altre informazioni, vedere Trasferimento sicuro.

  • Un client SSH. Per altre informazioni, vedere Connettersi a HDInsight (Apache Hadoop) con SSH. La maggior parte dei passaggi di questo documento presuppone che si usi Beeline da una sessione SSH al cluster. È anche possibile usare un client Beeline locale, ma questi passaggi non sono trattati in questo articolo.

Eseguire una query Hive

Questo esempio si basa sull'uso del client Beeline da una connessione SSH.

  1. Aprire una connessione SSH al cluster con il codice seguente. Sostituire sshuser con il nome utente SSH del cluster e sostituire CLUSTERNAME con il nome del cluster. Quando richiesto, immettere la password per l'account utente SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Connettersi a HiveServer2 con il client Beeline dalla sessione SSH aperta immettendo il comando seguente:

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

    Nota

    Fare riferimento alla parte "To HDInsight Enterprise Security Package (ESP) using Kerberos" part in Connect to HiveServer2 using Beeline or install Beeline localmente to connect from your local if you using an Enterprise Security Package (ESP) enabled cluster (ESP)

  3. 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.

    !sqlÈ disponibile , che viene usato per 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.

  4. 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.

  5. Immettere le istruzioni seguenti per creare una tabella denominata log4jLogs usando i dati di esempio forniti con il cluster HDInsight: (Rivedere in base allo schema URI.

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

    Queste istruzioni eseguono le azioni seguenti:

    Istruzione Descrizione
    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.
    FORMATO RIGA Formattazione dei dati. In questo caso, i campi in ogni log sono separati da uno spazio.
    PERCORSO ARCHIVIATO COME TEXTFILE Dove vengono archiviati i dati e in quale formato di file.
    SELECT Seleziona un conteggio di tutte le righe in cui la colonna t4 contiene 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 di restituire 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)
    
  6. Uscire da Beeline:

    !exit
    

Eseguire un file HiveQL

Questo esempio è una continuazione dell'esempio precedente. 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';
    

    Queste istruzioni eseguono le azioni seguenti:

    Istruzione Descrizione
    CREARE UNA TABELLA SE NON ESISTE Se la tabella non esiste già, viene creata. 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 ... SELEZIONARE 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 Immettere.

  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;
    

    Tre righe di dati devono essere restituite, 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 (0.813 seconds)
    

Passaggi successivi