Använda Apache Beeline-klienten med Apache Hive

Den här artikeln beskriver hur du använder kommandoradens Apache Beeline-klient för att skapa och köra Apache Hive-frågor över en SSH-anslutning.

Bakgrund

Beeline är en Hive-klient som ingår på huvudnoderna i HDInsight-klustret. Den här artikeln beskriver hur du använder det här verktyget via exempel med hjälp av en Hive-fråga och en HiveQL-fil.

Om du vill ansluta till Beeline-klienten som är installerad i HDInsight-klustret eller installera Beeline lokalt följer du vår guide för att ansluta till eller installera Apache Beeline.

Beeline använder JDBC för att ansluta till HiveServer2, en tjänst som finns i HDInsight-klustret. Du kan också använda Beeline för att få fjärråtkomst till Hive på HDInsight via Internet. Följande exempel innehåller de vanligaste anslutningssträngarna som används för att ansluta till HDInsight från Beeline.

Förutsättningar för exempel

  • Ett Hadoop-kluster i Azure HDInsight. Om du behöver ett kluster följer du vår guide för att skapa ett HDInsight-kluster.

  • Observera URI-schemat för klustrets primära lagring. Till exempel wasb:// för Azure Storage, abfs:// för Azure Data Lake Storage Gen2 eller adl:// för Azure Data Lake Storage Gen1. Om säker överföring är aktiverad för Azure Storage är wasbs://URI:n . Mer information finns i säker överföring.

  • En SSH-klient. Mer information finns i Ansluta till HDInsight (Apache Hadoop) med hjälp av SSH. De flesta av stegen i det här dokumentet förutsätter att du använder Beeline från en SSH-session till klustret. Du kan också använda en lokal Beeline-klient, men de stegen beskrivs inte i den här artikeln.

Köra en Hive-fråga

Det här exemplet baseras på användning av Beeline-klienten från en SSH-anslutning.

  1. Öppna en SSH-anslutning till klustret med koden nedan. Ersätt sshuser med SSH-användare för klustret och ersätt CLUSTERNAME med namnet på klustret. När du uppmanas till det anger du lösenordet för SSH-användarkontot.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Anslut till HiveServer2 med beeline-klienten från den öppna SSH-sessionen genom att ange följande kommando:

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

    Anteckning

    Se "Till HDInsight Enterprise Security Package-kluster (ESP) med Kerberos"-delen i Ansluta till HiveServer2 med Beeline eller installera Beeline lokalt för att ansluta från ditt lokala kluster om du använder ett ESP-aktiverat kluster (Enterprise Security Package)

  3. Beeline-kommandon börjar med ett ! tecken, till exempel !help visar hjälp. ! Men kan utelämnas för vissa kommandon. Till exempel help fungerar också.

    !sqlDet finns , som används för att köra HiveQL-instruktioner. HiveQL används dock så ofta att du kan utelämna föregående !sql. Följande två uttryck är likvärdiga:

    !sql show tables;
    show tables;
    

    I ett nytt kluster visas bara en tabell: hivesampletable.

  4. Använd följande kommando för att visa schemat för hivesampletable:

    describe hivesampletable;
    

    Det här kommandot returnerar följande information:

    +-----------------------+------------+----------+--+
    |       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     |          |
    +-----------------------+------------+----------+--+
    

    Den här informationen beskriver kolumnerna i tabellen.

  5. Ange följande instruktioner för att skapa en tabell med namnet log4jLogs med hjälp av exempeldata som tillhandahålls med HDInsight-klustret: (Ändra efter behov baserat på ditt URI-schema.)

    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;
    

    Dessa instruktioner utför följande åtgärder:

    Uttryck Beskrivning
    DROP TABLE Om tabellen finns tas den bort.
    SKAPA EXTERN TABELL Skapar en extern tabell i Hive. Externa tabeller lagrar endast tabelldefinitionen i Hive. Data finns kvar på den ursprungliga platsen.
    RADFORMAT Hur data formateras. I det här fallet avgränsas fälten i varje logg med ett blanksteg.
    LAGRAS SOM TEXTFILPLATS Var data lagras och i vilket filformat.
    SELECT Väljer ett antal av alla rader där kolumn t4 innehåller värdet [ERROR]. Den här frågan returnerar värdet 3 eftersom det finns tre rader som innehåller det här värdet.
    INPUT__FILE__NAME SOM %.log Hive försöker tillämpa schemat på alla filer i katalogen. I det här fallet innehåller katalogen filer som inte matchar schemat. För att förhindra skräpdata i resultatet säger den här instruktionen till Hive att den endast ska returnera data från filer som slutar i .log.

    Anteckning

    Externa tabeller bör användas när du förväntar dig att underliggande data ska uppdateras av en extern källa. Till exempel en automatiserad datauppladdningsprocess eller en MapReduce-åtgärd.

    Om du tar bort en extern tabell tas inte data bort, utan bara tabelldefinitionen.

    Utdata för det här kommandot liknar följande text:

    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. Avsluta beeline:

    !exit
    

Köra en HiveQL-fil

Det här exemplet är en fortsättning från föregående exempel. Använd följande steg för att skapa en fil och kör den sedan med Beeline.

  1. Använd följande kommando för att skapa en fil med namnet query.hql:

    nano query.hql
    
  2. Använd följande text som innehållet i filen. Den här frågan skapar en ny intern tabell med namnet 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';
    

    Dessa instruktioner utför följande åtgärder:

    Uttryck Beskrivning
    SKAPA TABELL OM DEN INTE FINNS Om tabellen inte redan finns skapas den. Eftersom nyckelordet EXTERNAL inte används skapar den här instruktionen en intern tabell. Interna tabeller lagras i Hive-informationslagret och hanteras helt av Hive.
    LAGRAS SOM ORC Lagrar data i ORC-format (Optimized Row Columnar). ORC-format är ett mycket optimerat och effektivt format för lagring av Hive-data.
    INFOGA SKRIV ÖVER ... VÄLJ Markerar rader från tabellen log4jLogs som innehåller [ERROR] och infogar sedan data i tabellen errorLogs .

    Anteckning

    Till skillnad från externa tabeller tas även underliggande data bort om en intern tabell tas bort.

  3. Om du vill spara filen använder du Ctrl+X, anger Y och slutligen Retur.

  4. Använd följande för att köra filen med Beeline:

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

    Anteckning

    Parametern -i startar Beeline och kör -uttrycken query.hql i filen. När frågan är klar kommer du till prompten jdbc:hive2://headnodehost:10001/> . Du kan också köra en fil med hjälp av parametern -f som avslutar Beeline när frågan har slutförts.

  5. Kontrollera att tabellen errorLogs skapades med följande instruktion för att returnera alla rader från errorLogs:

    SELECT * from errorLogs;
    

    Tre rader med data ska returneras, som alla innehåller [ERROR] i kolumn 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)
    

Nästa steg