Verwenden des Apache Beeline-Clients mit Apache HiveUse the Apache Beeline client with Apache Hive

Hier erfahren Sie, wie Sie Apache Beeline verwenden, um Hive-Abfragen unter HDInsight auszuführen.Learn how to use Apache Beeline to run Apache Hive queries on HDInsight.

Beeline ist ein Hive-Client, der auf den Hauptknoten des HDInsight-Clusters enthalten ist.Beeline is a Hive client that is included on the head nodes of your HDInsight cluster. Beeline verwendet JDBC, um eine Verbindung mit HiveServer2 herzustellen, einem Dienst, der in Ihrem HDInsight-Cluster gehostet wird.Beeline uses JDBC to connect to HiveServer2, a service hosted on your HDInsight cluster. Mit Beeline können Sie auch remote über das Internet auf Hive unter HDInsight zugreifen.You can also use Beeline to access Hive on HDInsight remotely over the internet. Die folgenden Beispiele zeigen die am häufigsten verwendeten Verbindungszeichenfolgen zum Herstellen einer Verbindung mit HDInsight aus Beeline:The following examples provide the most common connection strings used to connect to HDInsight from Beeline:

Arten von VerbindungenTypes of connections

Über eine SSH-SitzungFrom an SSH session

Beim Herstellen einer Verbindung aus einer SSH-Sitzung mit einem Clusterhauptknoten können Sie anschließend eine Verbindung mit der headnodehost-Adresse an Port 10001 herstellen:When connecting from an SSH session to a cluster headnode, you can then connect to the headnodehost address on port 10001:

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

Über ein virtuelles Azure-NetzwerkOver an Azure Virtual Network

Beim Herstellen einer Verbindung von einem Client zu HDInsight über ein virtuelles Azure-Netzwerk müssen Sie den vollqualifizierten Domänennamen (FQDN) eines Clusterhauptknotens angeben.When connecting from a client to HDInsight over an Azure Virtual Network, you must provide the fully qualified domain name (FQDN) of a cluster head node. Da diese Verbindung direkt mit den Clusterknoten hergestellt wird, wird für die Verbindung Port 10001 verwendet:Since this connection is made directly to the cluster nodes, the connection uses port 10001:

beeline -u 'jdbc:hive2://<headnode-FQDN>:10001/;transportMode=http'

Ersetzen Sie <headnode-FQDN> durch den vollqualifizierten Domänennamen eines Clusterhauptknotens.Replace <headnode-FQDN> with the fully qualified domain name of a cluster headnode. Verwenden Sie die Informationen im Dokument Verwalten von HDInsight mithilfe der Apache Ambari-REST-API, um den vollqualifizierten Domänennamen eines Hauptknotens zu ermitteln.To find the fully qualified domain name of a headnode, use the information in the Manage HDInsight using the Apache Ambari REST API document.


An den Cluster des HDInsight-Enterprise-Sicherheitspakets (ESP)To HDInsight Enterprise Security Package (ESP) cluster

Beim Herstellen einer Verbindung vom Client zu einem mit Azure Active Directory (AAD) verknüpften ESP-Cluster (Enterprise-Sicherheitspaket) müssen Sie auch den Domänennamen <AAD-Domain> und den Namen eines Domänenbenutzerkontos mit der Berechtigung für den Zugriff auf den Cluster <username> angeben:When connecting from a client to an Enterprise Security Package (ESP) cluster joined to Azure Active Directory (AAD), you must also specify the domain name <AAD-Domain> and the name of a domain user account with permissions to access the cluster <username>:

kinit <username>
beeline -u 'jdbc:hive2://<headnode-FQDN>:10001/default;principal=hive/_HOST@<AAD-Domain>;auth-kerberos;transportMode=http' -n <username>

Ersetzen Sie <username> durch den Namen eines Kontos in der Domäne mit der Berechtigung für den Zugriff auf den Cluster.Replace <username> with the name of an account on the domain with permissions to access the cluster. Ersetzen Sie <AAD-DOMAIN> durch den Namen der Azure Active Directory-Instanz (AAD), der der Cluster angehört.Replace <AAD-DOMAIN> with the name of the Azure Active Directory (AAD) that the cluster is joined to. Verwenden Sie eine Zeichenfolge aus Großbuchstaben für den Wert <AAD-DOMAIN>, da die Anmeldeinformationen sonst nicht gefunden werden.Use an uppercase string for the <AAD-DOMAIN> value, otherwise the credential won't be found. Überprüfen Sie /etc/krb5.conf bei Bedarf auf die Bereichsnamen.Check /etc/krb5.conf for the realm names if needed.


Über das öffentliche InternetOver public internet

Wenn Sie eine Verbindung über das öffentliche Internet herstellen möchten, müssen Sie den Kontonamen für die Clusteranmeldung (Standard ist admin) und das Kennwort angeben.When connecting over the public internet, you must provide the cluster login account name (default admin) and password. Beispiel: Verwenden von Beeline von einem Clientsystem zum Herstellen einer Verbindung mit der <clustername>.azurehdinsight.net-Adresse.For example, using Beeline from a client system to connect to the <clustername>.azurehdinsight.net address. Diese Verbindung erfolgt über Port 443 und wird mithilfe von SSL verschlüsselt:This connection is made over port 443, and is encrypted using SSL:

beeline -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/hive2' -n admin -p password

Ersetzen Sie clustername durch den Namen Ihres HDInsight-Clusters.Replace clustername with the name of your HDInsight cluster. Ersetzen Sie admin durch das Anmeldekonto für Ihren Cluster.Replace admin with the cluster login account for your cluster. Ersetzen Sie password durch das Kennwort des Anmeldekontos für den Cluster.Replace password with the password for the cluster login account.


Verwenden von Beeline mit Apache SparkUse Beeline with Apache Spark

Apache Spark stellt eine eigene Implementierung von HiveServer2 bereit, die manchmal als Spark Thrift-Server bezeichnet wird.Apache Spark provides its own implementation of HiveServer2, which is sometimes referred to as the Spark Thrift server. Bei diesem Dienst wird Spark SQL anstelle von Hive zum Auflösen von Abfragen verwendet und ermöglicht je nach Abfrage ggf. eine bessere Leistung.This service uses Spark SQL to resolve queries instead of Hive, and may provide better performance depending on your query.

Über das öffentliche Internet mit Apache SparkOver public internet with Apache Spark

Die Verbindungszeichenfolge, die beim Herstellen einer Verbindung über das Internet verwendet wird, weicht geringfügig ab.The connection string used when connecting over the internet is slightly different. Sie enthält httpPath/sparkhive2 anstelle von httpPath=/hive2:Instead of containing httpPath=/hive2 it is httpPath/sparkhive2:

beeline -u 'jdbc:hive2://clustername.azurehdinsight.net:443/;ssl=true;transportMode=http;httpPath=/sparkhive2' -n admin -p password

Vom Clusterhauptknoten oder in Azure Virtual Network mit Apache SparkFrom cluster head or inside Azure Virtual Network with Apache Spark

Wenn Sie direkt vom Clusterhauptknoten oder von einer Ressource, die sich in der gleichen Azure Virtual Network-Instanz wie der HDInsight-Cluster befindet, eine Verbindung herstellen, muss für den Spark Thrift-Server Port 10002 anstelle von Port 10001 verwendet werden.When connecting directly from the cluster head node, or from a resource inside the same Azure Virtual Network as the HDInsight cluster, port 10002 should be used for Spark Thrift server instead of 10001. Das folgende Beispiel zeigt, wie eine direkte Verbindung mit dem Hauptknoten hergestellt wird:The following example shows how to connect directly to the head node:

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

VoraussetzungenPrerequisites

  • Ein Hadoop-Cluster in HDInsight.A Hadoop cluster on HDInsight. Weitere Informationen finden Sie unter Erste Schritte mit HDInsight unter Linux.See Get Started with HDInsight on Linux.

  • Beachten Sie das URI-Schema für den primären Speicher Ihres Clusters.Notice the URI scheme for your cluster's primary storage. Beispiele: wasb:// für Azure Storage, abfs:// für Azure Data Lake Storage Gen2 oder adl:// für Azure Data Lake Storage Gen1.For example, wasb:// for Azure Storage, abfs:// for Azure Data Lake Storage Gen2, or adl:// for Azure Data Lake Storage Gen1. Wenn die sichere Übertragung für Azure Storage oder Data Lake Storage Gen2 aktiviert ist, lautet der URI wasbs:// bzw. abfss://.If secure transfer is enabled for Azure Storage or Data Lake Storage Gen2, the URI is wasbs:// or abfss://, respectively. Weitere Informationen finden Sie unter Sichere Übertragung.For more information, see secure transfer.

  • Option 1: Einen SSH-Client.Option 1: An SSH client. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit HDInsight (Hadoop) per SSH.For more information, see Connect to HDInsight (Apache Hadoop) using SSH. In den meisten Schritten in diesem Dokument wird davon ausgegangen, dass Sie Beeline aus einer SSH-Sitzung für den Cluster verwenden.Most of the steps in this document assume that you are using Beeline from an SSH session to the cluster.

  • Option 2: Ein lokaler Beeline-Client.Option 2: A local Beeline client.

Ausführen einer Hive-AbfrageRun a Hive query

Dieses Beispiel basiert auf der Verwendung des Beeline-Clients über eine SSH-Verbindung.This example is based on using the Beeline client from an SSH connection.

  1. Öffnen Sie über den nachstehenden Code eine SSH-Verbindung mit dem Cluster.Open an SSH connection to the cluster with the code below. Ersetzen Sie sshuser durch den SSH-Benutzer für Ihren Cluster und CLUSTERNAME durch den Namen Ihres Clusters.Replace sshuser with the SSH user for your cluster, and replace CLUSTERNAME with the name of your cluster. Geben Sie bei entsprechender Aufforderung das Kennwort für das SSH-Benutzerkonto ein.When prompted, enter the password for the SSH user account.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Stellen Sie mithilfe des folgenden Befehls mit Ihrem Beeline-Client eine Verbindung mit HiveServer2 aus Ihrer Open SSH-Sitzung her:Connect to HiveServer2 with your Beeline client from your open SSH session by entering the following command:

    beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
    
  3. Beeline-Befehle beginnen mit dem Zeichen !, z.B. !help zum Anzeigen der Hilfe.Beeline commands begin with a ! character, for example !help displays help. Jedoch kann ! bei einigen Befehlen ausgelassen werden.However the ! can be omitted for some commands. help funktioniert beispielsweise auch.For example, help also works.

    Es gibt ein !sql, das zum Ausführen von HiveQL-Anweisungen verwendet wird.There is a !sql, which is used to execute HiveQL statements. HiveQL wird aber so häufig genutzt, dass Sie das vorangestellte !sql weglassen können.However, HiveQL is so commonly used that you can omit the preceding !sql. Die folgenden beiden Anweisungen sind gleichwertig:The following two statements are equivalent:

    !sql show tables;
    show tables;
    

    In einem neuen Cluster wird nur eine Tabelle aufgelistet: hivesampletable.On a new cluster, only one table is listed: hivesampletable.

  4. Verwenden Sie folgenden Befehl, um das Schema für „hivesampletable“ anzuzeigen:Use the following command to display the schema for the hivesampletable:

    describe hivesampletable;
    

    Dieser Befehl gibt folgende Information zurück:This command returns the following 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     |          |
     +-----------------------+------------+----------+--+
    

    Diese Information beschreibt die Spalten in der Tabelle.This information describes the columns in the table.

  5. Geben Sie die folgenden Anweisungen ein, um eine Tabelle mit dem Namen log4jLogs zu erstellen, indem Sie die über das HDInsight-Cluster bereitgestellten Beispieldaten verwenden: (Überarbeiten Sie dies je nach Bedarf basierend auf Ihrem URI-Schema.)Enter the following statements to create a table named log4jLogs by using sample data provided with the HDInsight cluster: (Revise as needed based on your URI scheme.)

    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;
    

    Diese Anweisungen führen die folgenden Aktionen aus:These statements perform the following actions:

    • DROP TABLE: Wenn die Tabelle vorhanden ist, wird sie gelöscht.DROP TABLE - If the table exists, it is deleted.

    • CREATE EXTERNAL TABLE: Erstellt eine externe Tabelle in Hive.CREATE EXTERNAL TABLE - Creates an external table in Hive. Externe Tabellen speichern nur die Tabellendefinition in Hive.External tables only store the table definition in Hive. Die Daten verbleiben an ihrem ursprünglichen Speicherort.The data is left in the original location.

    • ROW FORMAT: Gibt an, wie die Daten formatiert werden.ROW FORMAT - How the data is formatted. In diesem Fall werden die Felder in den einzelnen Protokollen durch Leerzeichen getrennt.In this case, the fields in each log are separated by a space.

    • STORED AS TEXTFILE LOCATION: Wo die Daten gespeichert werden und in welchem Dateiformat.STORED AS TEXTFILE LOCATION - Where the data is stored and in what file format.

    • SELECT: Wählt die Anzahl aller Zeilen aus, bei denen die Spalte t4 den Wert [ERROR] enthält.SELECT - Selects a count of all rows where column t4 contains the value [ERROR]. Diese Abfrage gibt den Wert 3 zurück, da dieser Wert in drei Zeilen enthalten ist.This query returns a value of 3 as there are three rows that contain this value.

    • INPUT__FILE__NAME LIKE '%.log': Hive versucht, das Schema auf alle Dateien im Verzeichnis anzuwenden.INPUT__FILE__NAME LIKE '%.log' - Hive attempts to apply the schema to all files in the directory. In diesem Fall enthält das Verzeichnis Dateien, die dem Schema nicht entsprechen.In this case, the directory contains files that do not match the schema. Um überflüssige Daten in den Ergebnissen zu vermeiden, weist diese Anweisung Hive an, nur Daten aus Dateien zurückzugeben, die auf „.log“ enden.To prevent garbage data in the results, this statement tells Hive that it should only return data from files ending in .log.

    Hinweis

    Externe Tabellen sollten Sie verwenden, wenn Sie erwarten, dass die zugrunde liegenden Daten aus einer externen Quelle aktualisiert werden.External tables should be used when you expect the underlying data to be updated by an external source. Das könnte z.B. ein automatisierter Datenupload oder ein MapReduce-Vorgang sein.For example, an automated data upload process or a MapReduce operation.

    Durch das Löschen einer externen Tabelle werden nicht die Daten, sondern nur die Tabellendefinitionen gelöscht.Dropping an external table does not delete the data, only the table definition.

    Die Ausgabe dieses Befehls ähnelt dem folgenden Text:The output of this command is similar to the following 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. Verwenden Sie !exit, um Beeline zu beenden.To exit Beeline, use !exit.

Ausführen einer HiveQL-DateiRun a HiveQL file

Dies ist eine Fortsetzung des vorherigen Beispiels.This is a continuation from the prior example. Verwenden Sie die folgenden Schritte, um eine Datei zu erstellen und sie dann mit Beeline auszuführen.Use the following steps to create a file, then run it using Beeline.

  1. Verwenden Sie den folgenden Befehl, um eine Datei mit dem Namen query.hqlzu erstellen:Use the following command to create a file named query.hql:

    nano query.hql
    
  2. Verwenden Sie als Inhalt der Datei den folgenden Text.Use the following text as the contents of the file. Diese Abfrage erstellt eine neue „interne“ Tabelle mit dem Namen errorLogs:This query creates a new 'internal' table named 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';
    

    Diese Anweisungen führen die folgenden Aktionen aus:These statements perform the following actions:

    • CREATE TABLE IF NOT EXISTS: Wenn die Tabelle noch nicht vorhanden ist, wird sie erstellt.CREATE TABLE IF NOT EXISTS - If the table does not already exist, it is created. Da das EXTERNAL-Schlüsselwort nicht verwendet wird, erstellt diese Anweisung eine interne Tabelle.Since the EXTERNAL keyword is not used, this statement creates an internal table. Interne Tabellen werden im Hive-Data Warehouse gespeichert und vollständig von Hive verwaltet.Internal tables are stored in the Hive data warehouse and are managed completely by Hive.
    • ALS ORC GESPEICHERT – Speichert die Daten im ORC-Format (Optimized Row Columnar).STORED AS ORC - Stores the data in Optimized Row Columnar (ORC) format. ORC ist ein stark optimiertes und effizientes Format zum Speichern von Hive-Daten.ORC format is a highly optimized and efficient format for storing Hive data.
    • ÜBERSCHREIBEN EINFÜGEN ... SELECT: Wählt die Zeilen aus der Tabelle log4jLogs aus, die den Wert [ERROR] enthalten. Dann werden die Daten in die Tabelle errorLogs eingefügt.INSERT OVERWRITE ... SELECT - Selects rows from the log4jLogs table that contain [ERROR], then inserts the data into the errorLogs table.

    Hinweis

    Anders als bei externen Tabellen werden beim Löschen von internen Tabellen auch die zugrunde liegenden Daten gelöscht.Unlike external tables, dropping an internal table deletes the underlying data as well.

  3. Verwenden Sie STRG+ _X, um die Datei zu speichern. Geben Sie dann Y ein, und drücken Sie die EINGABETASTE.To save the file, use Ctrl+_X, then enter Y, and finally Enter.

  4. Verwenden Sie Folgendes, um die Datei mit Beeline auszuführen:Use the following to run the file using Beeline:

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

    Hinweis

    Der -i-Parameter startet Beeline und führt die Anweisungen in der Datei query.hql aus.The -i parameter starts Beeline and runs the statements in the query.hql file. Nach Abschluss der Abfrage wird die Eingabeaufforderung jdbc:hive2://headnodehost:10001/> angezeigt.Once the query completes, you arrive at the jdbc:hive2://headnodehost:10001/> prompt. Sie können eine Datei auch mit dem -f-Parameter ausführen, der Beeline beendet, nachdem die Abfrage abgeschlossen ist.You can also run a file using the -f parameter, which exits Beeline after the query completes.

  5. Um zu überprüfen, ob die Tabelle errorLogs erstellt wurde, verwenden Sie die folgende Anweisung, um alle Zeilen aus errorLogs zurückzugeben:To verify that the errorLogs table was created, use the following statement to return all the rows from errorLogs:

    SELECT * from errorLogs;
    

    Es sollten drei Datenzeilen zurückgegeben werden, die alle in Spalte „t4“ den Wert [FEHLER] enthalten:Three rows of data should be returned, all containing [ERROR] in column 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)
    

Nächste SchritteNext steps

Allgemeine Informationen zu Hive in HDInsight finden Sie im folgenden Artikel:For more general information on Hive in HDInsight, see the following document:

Weitere Informationen zu anderen Methoden zur Verwendung von Hadoop in HDInsight finden Sie in den folgenden Artikeln:For more information on other ways you can work with Hadoop on HDInsight, see the following documents: