Co to są apache Hive i HiveQL w usłudze Azure HDInsight?
Apache Hive to system magazynu danych dla platformy Apache Hadoop. Usługa Hive umożliwia podsumowywanie, wykonywanie zapytań i analizowanie danych. Zapytania Hive są pisane w języku HiveQL, który jest językiem zapytań podobnym do języka SQL.
Program Hive umożliwia projektowanie struktury danych w dużej mierze bez struktury. Po zdefiniowaniu struktury można użyć języka HiveQL do wykonywania zapytań dotyczących danych bez znajomości języka Java lub MapReduce.
Usługa HDInsight udostępnia kilka typów klastrów, które są dostrojone dla określonych obciążeń. Następujące typy klastrów są najczęściej używane w przypadku zapytań Hive:
Typ klastra | opis |
---|---|
Zapytanie interakcyjne | Klaster Hadoop, który zapewnia funkcję przetwarzania analitycznego o małych opóźnieniach (LLAP), aby poprawić czas odpowiedzi dla interakcyjnych zapytań. Aby uzyskać więcej informacji, zobacz dokument Start with Interactive Query in HDInsight (Rozpoczynanie pracy z interakcyjnym zapytaniem w usłudze HDInsight ). |
Hadoop | Klaster Hadoop dostosowany do obciążeń przetwarzania wsadowego. Aby uzyskać więcej informacji, zobacz dokument Start with Apache Hadoop in HDInsight (Rozpoczynanie pracy z platformą Apache Hadoop w usłudze HDInsight ). |
platforma Spark | Platforma Apache Spark ma wbudowane funkcje do pracy z programem Hive. Aby uzyskać więcej informacji, zobacz dokument Start with Apache Spark on HDInsight (Rozpoczynanie pracy z platformą Apache Spark w usłudze HDInsight ). |
HBase | HiveQL może służyć do wykonywania zapytań dotyczących danych przechowywanych w bazie danych Apache HBase. Aby uzyskać więcej informacji, zobacz dokument Start with Apache HBase on HDInsight (Rozpoczynanie pracy z bazą danych Apache HBase w usłudze HDInsight ). |
Jak używać programu Hive
Poniższa tabela zawiera informacje na temat różnych sposobów używania programu Hive z usługą HDInsight:
Użyj tej metody , jeśli chcesz... | ...zapytania interakcyjne | ...przetwarzanie wsadowe | ... z tego systemu operacyjnego klienta |
---|---|---|---|
Narzędzia usługi HDInsight dla programu Visual Studio Code | ✔ | ✔ | Linux, Unix, macOS X lub Windows |
Narzędzia usługi HDInsight dla programu Visual Studio | ✔ | ✔ | Windows |
widok programu Hive | ✔ | ✔ | Dowolne (oparte na przeglądarce) |
Klient beeline | ✔ | ✔ | Linux, Unix, macOS X lub Windows |
Interfejs API REST | ✔ | Linux, Unix, macOS X lub Windows | |
Windows PowerShell | ✔ | Windows |
Dokumentacja języka HiveQL
Dokumentacja języka HiveQL jest dostępna w podręczniku języka.
Hive i struktura danych
Hive rozumie, jak pracować z danymi ustrukturyzowanymi i częściowo ustrukturyzowanymi. Na przykład pliki tekstowe, w których pola są rozdzielane określonymi znakami. Poniższa instrukcja HiveQL tworzy tabelę dla danych rozdzielanych spacjami:
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 '/example/data/';
Program Hive obsługuje również niestandardowe serializatory/deserializatory (SerDe) dla złożonych lub nieregularnie ustrukturyzowanych danych. Aby uzyskać więcej informacji, zobacz dokument How to use a custom JSON SerDe with HDInsight (Jak używać niestandardowego serde JSON z usługą HDInsight ).
Aby uzyskać więcej informacji na temat formatów plików obsługiwanych przez program Hive, zobacz Podręcznik języka (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)
Tabele wewnętrzne programu Hive a tabele zewnętrzne
Istnieją dwa typy tabel, które można utworzyć za pomocą programu Hive:
Wewnętrzne: dane są przechowywane w magazynie danych Hive. Magazyn danych znajduje się w
/hive/warehouse/
domyślnym magazynie klastra.Użyj tabel wewnętrznych, gdy ma zastosowanie jeden z następujących warunków:
- Dane są tymczasowe.
- Chcesz, aby program Hive zarządzał cyklem życia tabeli i danych.
Zewnętrzne: dane są przechowywane poza magazynem danych. Dane mogą być przechowywane w dowolnym magazynie dostępnym przez klaster.
Użyj tabel zewnętrznych, gdy ma zastosowanie jeden z następujących warunków:
- Dane są również używane poza programem Hive. Na przykład pliki danych są aktualizowane przez inny proces (który nie blokuje plików).
- Dane muszą pozostać w lokalizacji bazowej, nawet po usunięciu tabeli.
- Potrzebna jest lokalizacja niestandardowa, taka jak konto magazynu innego niż domyślne.
- Program inny niż gałąź zarządza formatem danych, lokalizacją itd.
Aby uzyskać więcej informacji, zobacz wpis w blogu Wprowadzenie tabel wewnętrznych i zewnętrznych programu Hive.
Funkcje zdefiniowane przez użytkownika (UDF)
Hive można również rozszerzyć za pomocą funkcji zdefiniowanych przez użytkownika (UDF). Funkcja UDF umożliwia implementowanie funkcji lub logiki, które nie są łatwo modelowane w języku HiveQL. Aby zapoznać się z przykładem używania funkcji zdefiniowanych przez użytkownika z programem Hive, zobacz następujące dokumenty:
Używanie funkcji zdefiniowanej przez użytkownika w języku Java z oprogramowaniem Apache Hive
Używanie funkcji zdefiniowanej przez użytkownika w języku Python z usługą Apache Hive
Używanie funkcji zdefiniowanej przez użytkownika w języku C# z usługą Apache Hive
Jak dodać niestandardową funkcję zdefiniowaną przez użytkownika apache Hive do usługi HDInsight
Przykładowe dane
Program Hive w usłudze HDInsight jest wstępnie ładowany z wewnętrzną tabelą o nazwie hivesampletable
. Usługa HDInsight udostępnia również przykładowe zestawy danych, których można używać z programem Hive. Te zestawy danych są przechowywane w katalogach /example/data
i ./HdiSamples
Te katalogi istnieją w domyślnym magazynie klastra.
Przykładowe zapytanie Hive
Następujące instrukcje HiveQL projektują kolumny w /example/data/sample.log
pliku:
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 '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
GROUP BY t4;
W poprzednim przykładzie instrukcje HiveQL wykonują następujące akcje:
Oświadczenie | opis |
---|---|
DROP TABLE | Jeśli tabela już istnieje, usuń ją. |
TWORZENIE TABELI ZEWNĘTRZNEJ | Tworzy nową tabelę zewnętrzną w programie Hive. Tabele zewnętrzne przechowują tylko definicję tabeli w programie Hive. Dane pozostają w oryginalnej lokalizacji i w oryginalnym formacie. |
FORMAT WIERSZA | Informuje usługę Hive, jak dane są sformatowane. W takim przypadku pola w każdym dzienniku są oddzielone spacją. |
PRZECHOWYWANA JAKO LOKALIZACJA PLIKU TEKSTOWEGO | Informuje hive, gdzie dane są przechowywane ( example/data katalog) i że są przechowywane jako tekst. Dane mogą znajdować się w jednym pliku lub rozłożone na wiele plików w katalogu. |
SELECT | Wybiera liczbę wszystkich wierszy, w których kolumna t4 zawiera wartość [ERROR]. Ta instrukcja zwraca wartość 3 , ponieważ istnieją trzy wiersze zawierające tę wartość. |
INPUT__FILE__NAME JAK '%.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 powinniśmy zwracać tylko dane z plików kończących się na pliku .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, ale usuwa tylko definicję tabeli.
Aby utworzyć tabelę wewnętrzną zamiast zewnętrzną, użyj następującego języka HiveQL:
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]';
Te instrukcje wykonują następujące akcje:
Oświadczenie | opis |
---|---|
UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE | Jeśli tabela nie istnieje, utwórz ją. Ponieważ słowo kluczowe EXTERNAL nie jest używane, ta instrukcja tworzy tabelę wewnętrzną. Tabela jest przechowywana w magazynie danych Hive i jest zarządzana całkowicie przez usługę Hive. |
PRZECHOWYWANE JAKO ORC | Przechowuje dane w formacie ORC (Optimized Row Columnar). ORC to wysoce zoptymalizowany i wydajny format do przechowywania danych hive. |
WSTAW ZASTĘPOWANIE... WYBIERZ | Wybiera wiersze z tabeli zawierającej log4jLogs 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.
Zwiększanie wydajności zapytań programu Hive
Apache Tez
Apache Tez to struktura, która pozwala aplikacjom intensywnie korzystającym z danych, takim jak Hive, działać znacznie wydajniej na dużą skalę. Tez jest domyślnie włączony. Dokumenty projektowe apache Hive w usłudze Tez zawierają szczegółowe informacje na temat wyborów implementacji i dostrajania konfiguracji.
Przetwarzanie analityczne o małych opóźnieniach (LLAP)
LLAP (czasami znana jako Live Long i Process) to nowa funkcja w programie Hive 2.0, która umożliwia buforowanie zapytań w pamięci.
Usługa HDInsight udostępnia protokół LLAP w typie klastra Interactive Query. Aby uzyskać więcej informacji, zobacz dokument Rozpocznij od zapytania interakcyjnego.
Planowanie zapytań programu Hive
Istnieje kilka usług, których można użyć do uruchamiania zapytań programu Hive w ramach zaplanowanego lub na żądanie przepływu pracy.
Azure Data Factory
Usługa Azure Data Factory umożliwia korzystanie z usługi HDInsight w ramach potoku usługi Data Factory. Aby uzyskać więcej informacji na temat używania programu Hive z potoku, zobacz dokument Przekształcanie danych przy użyciu działania Programu Hive w usłudze Azure Data Factory .
Zadania Programu Hive i usługi SQL Server Integration Services
Do uruchamiania zadania programu Hive można użyć usług SQL Server Integration Services (SSIS). Pakiet Azure Feature Pack dla usług SSIS udostępnia następujące składniki, które współpracują z zadaniami programu Hive w usłudze HDInsight.
Aby uzyskać więcej informacji, zobacz dokumentację pakietu Azure Feature Pack .
Apache Oozie
Apache Oozie to system przepływu pracy i koordynacji, który zarządza zadaniami platformy Hadoop. Aby uzyskać więcej informacji na temat korzystania z rozwiązania Oozie z programem Hive, zobacz dokument Definiowanie i uruchamianie przepływu pracy przy użyciu systemu Apache Oozie.
Następne kroki
Teraz, gdy wiesz już, czym jest hive i jak używać go z usługą Hadoop w usłudze HDInsight, skorzystaj z poniższych linków, aby zapoznać się z innymi sposobami pracy z usługą Azure HDInsight.