Udostępnij za pośrednictwem


Użyj klienta Apache Beeline z usługą Apache Hive

W tym artykule opisano sposób używania klienta apache Beeline wiersza polecenia do tworzenia i wykonywania zapytań apache Hive za pośrednictwem połączenia SSH.

Kontekst

Beeline to klient programu Hive dołączony do węzłów głównych klastra usługi HDInsight. W tym artykule opisano, jak używać tego narzędzia za pomocą przykładów przy użyciu zapytania Hive i pliku HiveQL.

Aby nawiązać połączenie z klientem Beeline zainstalowanym w klastrze usługi HDInsight lub zainstalować usługę Beeline lokalnie, postępuj zgodnie z naszym przewodnikiem, aby nawiązać połączenie z usługą Apache Beeline, lub zainstaluj usługę Apache Beeline.

Usługa Beeline używa protokołu JDBC do nawiązywania połączenia z serwerem HiveServer2, usługą hostowaną w klastrze usługi HDInsight. Możesz również użyć rozwiązania Beeline, aby uzyskać zdalny dostęp do programu Hive w usłudze HDInsight za pośrednictwem Internetu. W poniższych przykładach przedstawiono najbardziej typowe parametry połączenia używane do nawiązywania połączenia z usługą HDInsight z usługi Beeline.

Wymagania wstępne dotyczące przykładów

  • Klaster Hadoop w usłudze Azure HDInsight. Jeśli potrzebujesz klastra, postępuj zgodnie z naszym przewodnikiem, aby utworzyć klaster usługi HDInsight.

  • Zwróć uwagę na schemat URI dla magazynu podstawowego klastra. Na przykład wasb:// w przypadku Azure Storage, abfs:// Azure Data Lake Storage Gen2 lub adl:// Azure Data Lake Storage Gen1. Jeśli bezpieczny transfer jest włączony dla usługi Azure Storage, identyfikator URI to wasbs://. Aby uzyskać więcej informacji, zobacz bezpieczny transfer.

  • Klient SSH. Aby uzyskać więcej informacji, zobacz Łączenie się z usługą HDInsight (Apache Hadoop) przy użyciu protokołu SSH. Większość kroków w tym dokumencie zakłada, że używasz Beeline w sesji SSH na klastrze. Możesz również użyć lokalnego klienta beeline, ale te kroki nie zostały omówione w tym artykule.

Uruchomienie zapytania programu Hive

Ten przykład jest oparty na użyciu klienta Beeline z połączenia SSH.

  1. Otwórz połączenie SSH z klastrem przy użyciu poniższego kodu. Zastąp sshuser użytkownikiem SSH dla swojego klastra i zastąp CLUSTERNAME nazwą swojego klastra. Po wyświetleniu monitu wprowadź hasło dla konta użytkownika SSH.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Połącz się z serwerem HiveServer2 przy użyciu klienta Beeline z poziomu otwartej sesji SSH, wprowadzając następujące polecenie:

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

    Uwaga

    Zapoznaj się z tematem "To HDInsight Enterprise Security Package (ESP) cluster using Kerberos" (Łączenie z serwerem HiveServer2 przy użyciu usługi Beeline) lub zainstaluj usługę Beeline lokalnie, aby nawiązać połączenie z lokalnego , jeśli używasz klastra z obsługą pakietu Enterprise Security (ESP)

  3. Polecenia Beeline zaczynają się od znaku !, a na przykład !help wyświetla pomoc. Jednak dla niektórych poleceń ! można pominąć. Na przykład help również działa.

    !sql jest używane do wykonywania instrukcji HiveQL. Jednak hiveQL jest tak często używany, że można pominąć poprzedni !sql. Następujące dwa zdania są równoważne:

    !sql show tables;
    show tables;
    

    W nowym klastrze jest wyświetlana tylko jedna tabela: hivesampletable.

  4. Użyj następującego polecenia, aby wyświetlić schemat programu hivesampletable:

    describe hivesampletable;
    

    To polecenie zwraca następujące informacje:

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

    Te informacje opisują kolumny w tabeli.

  5. Wprowadź następujące instrukcje, aby utworzyć tabelę o nazwie log4jLogs przy użyciu przykładowych danych dostarczonych z klastrem usługi HDInsight: (Popraw zgodnie z potrzebami w zależności od schematu identyfikatora 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;
    

    Te stwierdzenia wykonują następujące czynności:

    Wypowiedź Opis
    DROP TABLE (usuń tabelę) Jeśli tabela istnieje, zostanie usunięta.
    TWORZENIE TABELI ZEWNĘTRZNEJ Tworzy tabelę zewnętrzną w programie Hive. Tabele zewnętrzne przechowują tylko definicję tabeli w programie Hive. Dane pozostają w oryginalnej lokalizacji.
    FORMAT WIERSZA Sposób formatowania danych. W takim przypadku pola w każdym dzienniku są oddzielone spacją.
    PRZECHOWYWANA JAKO LOKALIZACJA PLIKU TEKSTOWEGO Gdzie dane są przechowywane i w jakim formacie pliku.
    Wybierz Wybiera liczbę wszystkich wierszy, w których kolumna t4 zawiera wartość [ERROR]. To zapytanie zwraca wartość 3 , ponieważ istnieją trzy wiersze zawierające tę wartość.
    INPUT__FILE__NAME LIKE '%.log' Program Hive próbuje zastosować schemat do wszystkich plików w katalogu. W takim przypadku katalog zawiera pliki, które nie są zgodne ze schematem. Aby zapobiec utracie pamięci w wynikach, ta instrukcja informuje program Hive, że powinien zwracać tylko dane z plików kończących się na .log.

    Uwaga

    Tabele zewnętrzne powinny być używane, gdy oczekujesz, że dane bazowe zostaną zaktualizowane przez źródło zewnętrzne. Na przykład zautomatyzowany proces przekazywania danych lub operacja MapReduce.

    Usunięcie tabeli zewnętrznej nie powoduje usunięcia danych, tylko definicji tabeli.

    Dane wyjściowe tego polecenia są podobne do następującego tekstu:

    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. Zamknij Beeline

    !exit
    

Uruchamianie pliku HiveQL

Ten przykład jest kontynuacją z poprzedniego przykładu. Wykonaj następujące kroki, aby utworzyć plik, a następnie uruchomić go przy użyciu narzędzia Beeline.

  1. Użyj następującego polecenia, aby utworzyć plik o nazwie query.hql:

    nano query.hql
    
  2. Użyj następującego tekstu jako zawartości pliku. To zapytanie tworzy nową tabelę wewnętrzną o nazwie 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';
    

    Te oświadczenia wykonują następujące czynności:

    Wypowiedź Opis
    UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE Jeśli tabela jeszcze nie istnieje, zostanie utworzona. Ponieważ słowo kluczowe EXTERNAL nie jest używane, ta instrukcja tworzy tabelę wewnętrzną. Tabele wewnętrzne są przechowywane w magazynie danych hive i są zarządzane całkowicie przez hive.
    PRZECHOWYWANE W FORMACIE ORC Przechowuje dane w formacie ORC (Optimized Row Columnar). Format ORC to wysoce zoptymalizowany i wydajny format do przechowywania danych hive.
    WSTAW ZASTĘPOWANIE... WYBRAĆ Wybiera wiersze z tabeli log4jLogs zawierającej błąd, a następnie wstawia dane do tabeli errorLogs .

    Uwaga

    W przeciwieństwie do tabel zewnętrznych usunięcie tabeli wewnętrznej powoduje również usunięcie bazowych danych.

  3. Aby zapisać plik, użyj Ctrl+X, a następnie wprowadź wartość Y, a na koniec wprowadź Enter.

  4. Aby uruchomić plik przy użyciu narzędzia Beeline, wykonaj następujące czynności:

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

    Uwaga

    Parametr -i uruchamia narzędzie Beeline i uruchamia instrukcje w query.hql pliku. Po zakończeniu zapytania pojawi się monit jdbc:hive2://headnodehost:10001/>. Możesz również uruchomić plik przy użyciu parametru -f , który kończy działanie usługi Beeline po zakończeniu zapytania.

  5. Aby sprawdzić, czy tabela errorLogs została utworzona, użyj następującej instrukcji, aby zwrócić wszystkie wiersze z tabeli errorLogs:

    SELECT * from errorLogs;
    

    Powinny zostać zwrócone trzy wiersze danych, wszystkie zawierające [ERROR] w kolumnie 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)
    

Następne kroki