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 dlaabfs://
Azure Data Lake Storage Gen2 lubadl://
Azure Data Lake Storage Gen1. Jeśli bezpieczny transfer jest włączony dla usługi Azure Storage, identyfikator URI towasbs://
. 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.
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ągCLUSTERNAME
na nazwę klastra. Po wyświetleniu monitu wprowadź hasło dla konta użytkownika SSH.ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
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)
Polecenia beeline zaczynają się od
!
znaku, na przykład!help
wyświetla pomoc.!
Można jednak pominąć niektóre polecenia. Na przykładhelp
działa również polecenie .!sql
Istnieje 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.
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.
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)
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.
Użyj następującego polecenia, aby utworzyć plik o nazwie query.hql:
nano query.hql
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.
Aby zapisać plik, naciśnij klawisze Ctrl+X, a następnie wprowadź Y, a na koniec wprowadź klawisz Enter.
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 wquery.hql
pliku . Po zakończeniu zapytania zostanie wyświetlonyjdbc: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.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
Aby uzyskać więcej ogólnych informacji na temat programu Hive w usłudze HDInsight, zobacz Use Apache Hive with Apache Hadoop on HDInsight (Używanie technologii Apache Hive z platformą Apache Hadoop w usłudze HDInsight)
Dokumentacja języka HiveQL znajduje się w podręczniku języka
Aby uzyskać więcej informacji na temat innych sposobów pracy z usługą Hadoop w usłudze HDInsight, zobacz Use MapReduce with Apache Hadoop on HDInsight (Korzystanie z usługi MapReduce z usługą Apache Hadoop w usłudze HDInsight)