Co to są usługi 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 funkcje przetwarzania analitycznego o małych opóźnieniach (LLAP), aby poprawić czas odpowiedzi dla zapytań interakcyjnych. Aby uzyskać więcej informacji, zobacz dokument Rozpoczynanie od Interactive Query w usłudze HDInsight.
Hadoop Klaster Hadoop dostosowany do obciążeń przetwarzania wsadowego. Aby uzyskać więcej informacji, zobacz dokument Rozpoczynanie pracy z usługą 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 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 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.

Struktura hive i 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. Następująca 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 mają 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.
    • Potrzebujesz lokalizacji niestandardowej, takiej jak konto magazynu inne 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 zdefiniowana przez użytkownika umożliwia zaimplementowanie funkcji lub logiki, które nie są łatwo modelowane w technologii HiveQL. Aby zapoznać się z przykładem używania funkcji zdefiniowanych przez użytkownika z usługą Hive, zobacz następujące dokumenty:

Przykładowe dane

Usługa Hive w usłudze HDInsight jest wstępnie ładowana 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 usługą 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:

Instrukcja 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 o sposobie formatowania danych. W takim przypadku pola w każdym dzienniku są oddzielone spacją.
PRZECHOWYWANA JAKO LOKALIZACJA PLIKU TEKSTOWEGO Informuje usługę Hive, gdzie są przechowywane dane ( 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 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 powinniśmy 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, ale tylko usuwa 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:

Instrukcja 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 całkowicie zarządzana 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.
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.

Zwiększanie wydajności zapytań programu Hive

Apache Tez

Apache Tez to struktura, która umożliwia aplikacjom intensywnie korzystającym z danych, takim jak Hive, znacznie wydajniejsze uruchamianie na dużą skalę. Aplikacja Tez jest domyślnie włączona. Dokumenty projektowe apache Hive w usłudze Tez zawierają szczegółowe informacje na temat wyborów implementacji i konfiguracji dostrajania.

Przetwarzanie analityczne o małych opóźnieniach (LLAP)

LLAP (czasami znany jako Live Long and 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 Rozpoczynanie od Interactive Query.

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

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 Transform data using Hive activity in Azure Data Factory (Przekształcanie danych przy użyciu działania programu Hive w Azure Data Factory).

Zadania Hive i usługi SQL Server Integration Services

Do uruchamiania zadania 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 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 usługi Oozie z programem Hive, zobacz definiowanie i uruchamianie dokumentu przepływu pracy przy użyciu technologii Apache Oozie .

Uwaga

Program obsługi magazynu Phoenix dla programu Hive nie jest obsługiwany w usłudze HDInsight

Następne kroki

Teraz, gdy już wiesz, 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.