Delen via


De Apache Beeline-client gebruiken met Apache Hive

In dit artikel wordt beschreven hoe u de opdrachtregelclient van Apache Beeline gebruikt om Apache Hive-query's te maken en uit te voeren via een SSH-verbinding.

Achtergrond

Beeline is een Hive-client die is opgenomen op de hoofdknooppunten van uw HDInsight-cluster. In dit artikel wordt beschreven hoe u dit hulpprogramma kunt gebruiken aan de hand van voorbeelden met behulp van een Hive-query en een HiveQL-bestand.

Als u verbinding wilt maken met de Beeline-client die is geïnstalleerd op uw HDInsight-cluster of als u Beeline lokaal wilt installeren, volgt u onze handleiding om verbinding te maken met of te installeren van Apache Beeline.

Beeline gebruikt JDBC om verbinding te maken met HiveServer2, een service die wordt gehost op uw HDInsight-cluster. U kunt ook Beeline gebruiken om hive op HDInsight op afstand te openen via internet. De volgende voorbeelden bevatten de meest voorkomende verbindingsreeksen die worden gebruikt om vanuit Beeline verbinding te maken met HDInsight.

Vereisten voor voorbeelden

  • Een Hadoop-cluster in Azure HDInsight. Als u een cluster nodig hebt, volgt u onze handleiding voor het maken van een HDInsight-cluster.

  • Let op het URI-schema voor de primaire opslag van uw cluster. Bijvoorbeeld wasb:// voor Azure Storage, abfs:// voor Azure Data Lake Storage Gen2 of adl:// voor Azure Data Lake Storage Gen1. Als beveiligde overdracht is ingeschakeld voor Azure Storage, is wasbs://de URI . Zie beveiligde overdracht voor meer informatie.

  • Een SSH-client. Zie voor meer informatie Verbinding maken met HDInsight (Apache Hadoop) via SSH. In de meeste stappen in dit document wordt ervan uitgegaan dat u Beeline gebruikt vanuit een SSH-sessie naar het cluster. U kunt ook een lokale Beeline-client gebruiken, maar deze stappen worden niet behandeld in dit artikel.

Een Hive-query uitvoeren

Dit voorbeeld is gebaseerd op het gebruik van de Beeline-client vanuit een SSH-verbinding.

  1. Open een SSH-verbinding met het cluster met de onderstaande code. Vervang sshuser door de SSH-gebruiker voor uw cluster en CLUSTERNAME door de naam van het cluster. Voer desgevraagd het wachtwoord voor het SSH-gebruikersaccount in.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Maak verbinding met HiveServer2 met uw Beeline-client vanuit uw geopende SSH-sessie door de volgende opdracht in te voeren:

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

    Notitie

    Raadpleeg het gedeelte 'Naar HDInsight Enterprise Security Package (ESP)-cluster met kerberos' in Verbinding maken met HiveServer2 met behulp van Beeline of beeline lokaal installeren om verbinding te maken vanuit uw lokale cluster als u een cluster met Enterprise Security Package (ESP) gebruikt

  3. Beeline-opdrachten beginnen met een ! teken, geeft bijvoorbeeld !help help weer. ! De kan echter worden weggelaten voor sommige opdrachten. Werkt bijvoorbeeld help ook.

    Er is !sql, die wordt gebruikt voor het uitvoeren van HiveQL-instructies. HiveQL wordt echter zo vaak gebruikt dat u de voorgaande !sqlkunt weglaten. De volgende twee instructies zijn gelijkwaardig:

    !sql show tables;
    show tables;
    

    In een nieuw cluster wordt slechts één tabel weergegeven: hivesampletable.

  4. Gebruik de volgende opdracht om het schema voor de hivesampletable weer te geven:

    describe hivesampletable;
    

    Deze opdracht retourneert de volgende informatie:

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

    Deze informatie beschrijft de kolommen in de tabel.

  5. Voer de volgende instructies in om een tabel met de naam log4jLogs te maken met behulp van voorbeeldgegevens die bij het HDInsight-cluster worden geleverd: (Pas indien nodig aan op basis van uw 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;
    

    Met deze instructies worden de volgende acties uitgevoerd:

    Instructie Beschrijving
    DROP TABLE Als de tabel bestaat, wordt deze verwijderd.
    CREATE EXTERNAL TABLE Hiermee maakt u een externe tabel in Hive. Externe tabellen slaan alleen de tabeldefinitie op in Hive. De gegevens worden op de oorspronkelijke locatie achtergelaten.
    RIJOPMAAK De indeling van de gegevens. In dit geval worden de velden in elk logboek gescheiden door een spatie.
    OPGESLAGEN ALS TEKSTBESTANDLOCATIE Waar de gegevens worden opgeslagen en in welke bestandsindeling.
    SELECT Selecteert een telling van alle rijen waarin kolom t4 de waarde [FOUT] bevat. Deze query retourneert een waarde van 3 , omdat er drie rijen zijn die deze waarde bevatten.
    INPUT__FILE__NAME LIKE '%.log' Hive probeert het schema toe te passen op alle bestanden in de map. In dit geval bevat de map bestanden die niet overeenkomen met het schema. Om garbage-gegevens in de resultaten te voorkomen, vertelt deze instructie Hive dat deze alleen gegevens mag retourneren uit bestanden die eindigen op .log.

    Notitie

    Externe tabellen moeten worden gebruikt wanneer u verwacht dat de onderliggende gegevens worden bijgewerkt door een externe bron. Bijvoorbeeld een geautomatiseerd proces voor het uploaden van gegevens of een MapReduce-bewerking.

    Als u een externe tabel verwijdert, worden de gegevens niet verwijderd, alleen de tabeldefinitie.

    De uitvoer van deze opdracht is vergelijkbaar met de volgende tekst:

    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. Beeline afsluiten:

    !exit
    

Een HiveQL-bestand uitvoeren

Dit voorbeeld is een voortzetting van het vorige voorbeeld. Gebruik de volgende stappen om een bestand te maken en voer het vervolgens uit met Behulp van Beeline.

  1. Gebruik de volgende opdracht om een bestand met de naam query.hql te maken:

    nano query.hql
    
  2. Gebruik de volgende tekst als de inhoud van het bestand. Met deze query maakt u een nieuwe 'interne' tabel met de naam 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';
    

    Met deze instructies worden de volgende acties uitgevoerd:

    Instructie Beschrijving
    TABEL MAKEN ALS DEZE NIET BESTAAT Als de tabel nog niet bestaat, wordt deze gemaakt. Omdat het trefwoord EXTERNAL niet wordt gebruikt, wordt met deze instructie een interne tabel gemaakt. Interne tabellen worden opgeslagen in het Hive-datawarehouse en worden volledig beheerd door Hive.
    OPGESLAGEN ALS ORC Slaat de gegevens op in de indeling Geoptimaliseerde rijkolommen (ORC). ORC-indeling is een zeer geoptimaliseerde en efficiënte indeling voor het opslaan van Hive-gegevens.
    INSERT OVERWRITE ... SELECTEER Selecteert rijen uit de tabel log4jLogs die [ERROR] bevatten en voegt vervolgens de gegevens in de tabel errorLogs in.

    Notitie

    In tegenstelling tot externe tabellen worden bij het verwijderen van een interne tabel ook de onderliggende gegevens verwijderd.

  3. Als u het bestand wilt opslaan, gebruikt u Ctrl+X, voert u vervolgens Y in en ten slotte Enter.

  4. Gebruik het volgende om het bestand uit te voeren met Beeline:

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

    Notitie

    Met de -i parameter wordt Beeline gestart en worden de -instructies in het query.hql bestand uitgevoerd. Zodra de query is voltooid, komt u bij de jdbc:hive2://headnodehost:10001/> prompt. U kunt ook een bestand uitvoeren met behulp van de -f parameter, waarmee Beeline wordt afgesloten nadat de query is voltooid.

  5. Als u wilt controleren of de tabel errorLogs is gemaakt, gebruikt u de volgende instructie om alle rijen uit errorLogs te retourneren:

    SELECT * from errorLogs;
    

    Er moeten drie rijen met gegevens worden geretourneerd, die allemaal [ERROR] bevatten in kolom 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)
    

Volgende stappen