Używanie 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.

Tło

Beeline to klient programu Hive, który znajduje się w węzłach głównych klastra usługi HDInsight. W tym artykule opisano sposób użycia 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ą , lub zainstalować rozwiązanie Apache Beeline.

Usługa Beeline używa sterownika JDBC do nawiązywania połączenia z serwerem HiveServer2— usługą hostowaną w klastrze usługi HDInsight. Możesz również użyć usługi 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 identyfikatora URI dla magazynu podstawowego klastra. Na przykład wasb:// w przypadku usługi Azure Storage dla 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 usługi Beeline z sesji SSH do klastra. Możesz również użyć lokalnego klienta beeline, ale te kroki nie zostały opisane w tym artykule.

Uruchomienie zapytania programu Hive

Ten przykład jest oparty na korzystaniu z klienta beeline z połączenia SSH.

  1. Otwórz połączenie SSH z klastrem przy użyciu poniższego kodu. Zamień ciąg sshuser na nazwę użytkownika SSH klastra i zamień ciąg CLUSTERNAME na nazwę 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 otwartej sesji SSH, wprowadzając następujące polecenie:

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

    Uwaga

    Zapoznaj się z częścią "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 komputera lokalnego , jeśli używasz klastra z włączonym pakietem Enterprise Security (ESP)

  3. Polecenia beeline zaczynają się od ! znaku, na przykład !help wyświetla pomoc. ! Można jednak pominąć niektóre polecenia. Na przykład help działa również polecenie .

    !sqlIstnieje wartość , która służy do wykonywania instrukcji HiveQL. Jednak hiveQL jest tak często używany, że można pominąć poprzedni !sql. Następujące dwie instrukcje 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 elementu 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 na podstawie 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 instrukcje wykonują następujące czynności:

    Instrukcja Opis
    DROP TABLE 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 są przechowywane dane i w jakim formacie pliku.
    SELECT 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 odśmiecaniu danych 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. Zakończ działanie beeline:

    !exit
    

Uruchamianie pliku HiveQL

Ten przykład jest kontynuacją z poprzedniego przykładu. Wykonaj poniższe kroki, aby utworzyć plik, a następnie uruchom go przy użyciu rozwiązania 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 instrukcje wykonują następujące czynności:

    Instrukcja 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ą całkowicie zarządzane przez program Hive.
    PRZECHOWYWANE JAKO ORC Przechowuje dane w formacie ORC (Optimized Row Columnar). Format ORC to wysoce zoptymalizowany i wydajny format do przechowywania danych hive.
    INSERT OVERWRITE ... WYBIERZ Wybiera wiersze z tabeli log4jLogs , która zawiera błąd [ERROR], 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 danych bazowych.

  3. Aby zapisać plik, naciśnij klawisze Ctrl+X, a następnie wprowadź Y, a na koniec wprowadź klawisz Enter.

  4. Użyj następującego polecenia, aby uruchomić plik przy użyciu rozwiązania Beeline:

    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 zostanie wyświetlony jdbc:hive2://headnodehost:10001/> monit. 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 zawierające ciąg [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