Ula Apache - Apache Hive

Ula Apache
Ula Apache
Pierwotny autor (autorzy) Facebook, Inc.
Deweloper(zy) Współtwórcy
Pierwsze wydanie 1 października 2010 ; 10 lat temu ( 2010-10-01 )
Wersja stabilna
3.1.2 / 26 sierpnia 2019 ; 2 lata temu ( 26.08.2019 )
Magazyn github .com / Apache / ula
Napisane w Jawa
System operacyjny Wieloplatformowy
Dostępne w SQL
Rodzaj Hurtownia danych
Licencja Licencja Apache 2.0
Strona internetowa ul .apache .org

Apache Hive to projekt oprogramowania hurtowni danych zbudowany na bazie Apache Hadoop w celu zapewnienia zapytań i analizy danych. Hive udostępnia interfejs podobny do języka SQL do wykonywania zapytań dotyczących danych przechowywanych w różnych bazach danych i systemach plików, które integrują się z usługą Hadoop. Tradycyjne zapytania SQL muszą być zaimplementowane w MapReduce Java API, aby wykonywać aplikacje SQL i zapytania na danych rozproszonych. Hive zapewnia niezbędną abstrakcję SQL do integracji zapytań podobnych do SQL ( HiveQL ) z podstawową Javą bez konieczności implementowania zapytań w niskopoziomowym interfejsie API Java. Ponieważ większość aplikacji hurtowni danych współpracuje z językami zapytań opartymi na SQL, Hive ułatwia przenoszenie aplikacji opartych na SQL do Hadoop. Chociaż początkowo opracowany przez Facebook , Apache Hive jest używany i rozwijany przez inne firmy, takie jak Netflix i Urząd Regulacji Przemysłu Finansowego (FINRA). Amazon utrzymuje widelec oprogramowania Apache Hive zawarty w Amazon Elastic MapReduce w Amazon Web Services .

Cechy

Apache Hive obsługuje analizę dużych zbiorów danych przechowywanych w HDFS Hadoop i kompatybilnych systemach plików, takich jak system plików Amazon S3 i Alluxio . Zapewnia język zapytań podobny do SQL o nazwie HiveQL ze schematem przy odczycie i przejrzyście konwertuje zapytania na zadania MapReduce , Apache Tez i Spark . Wszystkie trzy aparaty wykonawcze mogą działać w negocjatorze zasobów platformy Hadoop — YARN (Yet Another Resource Negotiator). Aby przyspieszyć zapytania, udostępnił indeksy, ale ta funkcja została usunięta w wersji 3.0. Inne funkcje Hive obejmują:

  • Różne typy przechowywania, takie jak zwykły tekst, RCFile , HBase , ORC i inne.
  • Przechowywanie metadanych w systemie zarządzania relacyjnymi bazami danych , co znacznie skraca czas wykonywania kontroli semantycznych podczas wykonywania zapytań.
  • Działające na skompresowanych danych przechowywanych w ekosystemie Hadoop wykorzystaniem algorytmów tym siadać , BWT , sztuczki itp
  • Wbudowane funkcje zdefiniowane przez użytkownika (UDF) do manipulowania datami, ciągami i innymi narzędziami do eksploracji danych. Hive obsługuje rozszerzanie zestawu UDF do obsługi przypadków użycia nieobsługiwanych przez funkcje wbudowane.
  • Zapytania podobne do SQL (HiveQL), które są niejawnie konwertowane na zadania MapReduce, Tez lub Spark.

Domyślnie Hive przechowuje metadane we wbudowanej bazie danych Apache Derby i opcjonalnie można użyć innych baz danych klient/serwer, takich jak MySQL .

Pierwsze cztery formaty plików obsługiwane w programie Hive to zwykły tekst, plik sekwencji, zoptymalizowany format kolumnowy wierszy (ORC) i RCFile . Apache Parquet można odczytać za pomocą wtyczki w wersjach późniejszych niż 0.10 i natywnie począwszy od 0.13. Dodatkowe wtyczki Hive obsługują zapytania dotyczące łańcucha bloków Bitcoin .

Architektura

Główne elementy architektury Hive to:

  • Metastore: przechowuje metadane dla każdej z tabel, takie jak ich schemat i lokalizacja. Zawiera również metadane partycji, które pomagają sterownikowi śledzić postęp różnych zestawów danych rozproszonych w klastrze. Dane są przechowywane w tradycyjnym formacie RDBMS . Metadane pomagają kierowcy śledzić dane i mają kluczowe znaczenie. Dlatego serwer kopii zapasowych regularnie replikuje dane, które można odzyskać w przypadku utraty danych.
  • Sterownik: działa jak kontroler, który odbiera instrukcje HiveQL. Rozpoczyna wykonywanie instrukcji, tworząc sesje i monitoruje cykl życia i postęp wykonania. Przechowuje niezbędne metadane generowane podczas wykonywania instrukcji HiveQL. Sterownik działa również jako punkt zbierania danych lub wyników zapytań uzyskanych po operacji Zmniejsz.
  • Kompilator: Wykonuje kompilację zapytania HiveQL, która konwertuje zapytanie na plan wykonania. Ten plan zawiera zadania i kroki, które muszą zostać wykonane przez usługę Hadoop MapReduce, aby uzyskać wyniki przetłumaczone przez zapytanie. Kompilator konwertuje zapytanie na abstrakcyjne drzewo składni (AST). Po sprawdzeniu zgodności i błędach czasu kompilacji konwertuje AST na ukierunkowany wykres acykliczny (DAG). DAG dzieli operatorów na etapy i zadania MapReduce na podstawie zapytania wejściowego i danych.
  • Optymalizator: Wykonuje różne przekształcenia w planie wykonania, aby uzyskać zoptymalizowany DAG. Przekształcenia można agregować razem, na przykład konwertować potok sprzężeń na jedno sprzężenie, aby uzyskać lepszą wydajność. Może również dzielić zadania, takie jak zastosowanie transformacji na danych przed operacją redukcji, aby zapewnić lepszą wydajność i skalowalność. Jednak logika transformacji używana do optymalizacji może zostać zmodyfikowana lub potokowa przy użyciu innego optymalizatora.
  • Executor: Po kompilacji i optymalizacji, executor wykonuje zadania. Współdziała z modułem śledzenia zadań Hadoop, aby zaplanować zadania do uruchomienia. Zajmuje się potokowaniem zadań, upewniając się, że zadanie z zależnością zostanie wykonane tylko wtedy, gdy zostaną uruchomione wszystkie inne wymagania wstępne.
  • CLI, UI i Thrift Server : Interfejs wiersza poleceń (CLI) zapewnia interfejs użytkownika dla użytkownika zewnętrznego do interakcji z Hive poprzez przesyłanie zapytań, instrukcji i monitorowanie stanu procesu. Serwer Thrift umożliwia klientom zewnętrznym interakcję z Hive przez sieć, podobnie jak protokoły JDBC lub ODBC .

HiveQL

Opierając się na SQL, HiveQL nie przestrzega ściśle pełnego standardu SQL-92 . HiveQL oferuje rozszerzenia spoza SQL, w tym wstawianie wielu tabel i tworzenie tabeli jako select . W HiveQL brakowało obsługi transakcji i widoków zmaterializowanych , a obsługa podzapytań była ograniczona. W wersji 0.14 udostępniono obsługę wstawiania, aktualizowania i usuwania z pełną funkcjonalnością ACID .

Wewnętrznie kompilator tłumaczy instrukcje HiveQL na skierowany acykliczny wykres zadań MapReduce , Tez lub Spark , które są przesyłane do usługi Hadoop w celu wykonania.

Przykład

Program liczenia słów zlicza, ile razy każde słowo pojawia się na wejściu. Liczba słów może być zapisana w HiveQL jako:

DROP TABLE IF EXISTS docs;
CREATE TABLE docs (line STRING);
LOAD DATA INPATH 'input_file' OVERWRITE INTO TABLE docs;
CREATE TABLE word_counts AS
SELECT word, count(1) AS count FROM
 (SELECT explode(split(line, '\s')) AS word FROM docs) temp
GROUP BY word
ORDER BY word;

Krótkie wyjaśnienie każdego ze stwierdzeń jest następujące:

DROP TABLE IF EXISTS docs;
CREATE TABLE docs (line STRING);

Sprawdza, czy tabela docsistnieje i usuwa ją, jeśli tak. Tworzy nową tabelę o nazwie docsz pojedynczą kolumną typu o STRINGnazwie line.

LOAD DATA INPATH 'input_file' OVERWRITE INTO TABLE docs;

Ładuje określony plik lub katalog (w tym przypadku „plik_wejściowy”) do tabeli. OVERWRITEokreśla, że ​​tabela docelowa, do której ładowane są dane, ma zostać ponownie zapisana; W przeciwnym razie dane zostaną dołączone.

CREATE TABLE word_counts AS
SELECT word, count(1) AS count FROM
(SELECT explode(split(line, '\s')) AS word FROM docs) temp
GROUP BY word
ORDER BY word;

Zapytanie CREATE TABLE word_counts AS SELECT word, count(1) AS counttworzy tabelę o nazwie word_countsz dwiema kolumnami: wordi count. To zapytanie pobiera dane wejściowe z zapytania wewnętrznego . To zapytanie służy do podziału słów wejściowych na różne wiersze tabeli tymczasowej o aliasie . Do grupy wyników w oparciu o ich klucze. Powoduje to, że kolumna zawiera liczbę wystąpień każdego słowa w kolumnie. Sortuje słowa alfabetycznie. (SELECT explode(split(line, '\s')) AS word FROM docs) temp"tempGROUP BY WORDcountwordORDER BY WORDS

Porównanie z tradycyjnymi bazami danych

Operacje przechowywania i wykonywania zapytań w programie Hive są bardzo podobne do tych w tradycyjnych bazach danych. Chociaż Hive jest dialektem SQL, istnieje wiele różnic w strukturze i działaniu Hive w porównaniu z relacyjnymi bazami danych. Różnice wynikają głównie z tego, że Hive jest zbudowany na szczycie ekosystemu Hadoop i musi być zgodny z ograniczeniami Hadoop i MapReduce .

Schemat jest stosowany do tabeli w tradycyjnych bazach danych. W takich tradycyjnych bazach danych tabela zazwyczaj wymusza schemat, gdy dane są ładowane do tabeli. Dzięki temu baza danych może upewnić się, że wprowadzone dane są zgodne z reprezentacją tabeli określoną w definicji tabeli. Ten projekt jest nazywany schematem przy zapisie . Dla porównania Hive nie weryfikuje danych względem schematu tabeli podczas zapisu. Zamiast tego wykonuje następnie kontrole w czasie wykonywania, gdy dane są odczytywane. Model ten nazywa się schematem przy odczycie . Te dwa podejścia mają swoje zalety i wady. Porównywanie danych ze schematem tabeli w czasie ładowania powoduje dodatkowe obciążenie, dlatego tradycyjne bazy danych dłużej ładują dane. Kontrole jakości są przeprowadzane na danych w czasie ładowania, aby upewnić się, że dane nie są uszkodzone. Wczesne wykrywanie uszkodzonych danych zapewnia wczesną obsługę wyjątków. Ponieważ tabele są zmuszone do dopasowania schematu po/podczas ładowania danych, ma on lepszą wydajność w czasie wykonywania zapytań. Z drugiej strony Hive może ładować dane dynamicznie bez sprawdzania schematu, zapewniając szybkie ładowanie początkowe, ale z wadą stosunkowo wolniejszej wydajności w czasie zapytania. Hive ma przewagę, gdy schemat nie jest dostępny w czasie ładowania, ale jest generowany później dynamicznie.

Transakcje to kluczowe operacje w tradycyjnych bazach danych. Jak każdy typowy RDBMS , Hive obsługuje wszystkie cztery właściwości transakcji ( ACID ): Atomicity , Consistency , Isolation i Durability . Transakcje w Hive zostały wprowadzone w Hive 0.13, ale były ograniczone tylko do poziomu partycji. W najnowszej wersji Hive 0.14 te funkcje zostały w pełni dodane do obsługi pełnych właściwości ACID . Hive 0,14 i nowsze udostępniają różne transakcje na poziomie wiersza, takie jak INSERT, DELETE i UPDATE . Włączenie INSERT UPDATE, usuwania transakcje wymagają ustawienia odpowiednich wartości właściwości konfiguracyjnych, takich jak hive.support.concurrency, hive.enforce.bucketingi hive.exec.dynamic.partition.mode.

Bezpieczeństwo

Hive v0.7.0 dodał integrację z zabezpieczeniami Hadoop. Hadoop zaczął korzystać z obsługi autoryzacji Kerberos, aby zapewnić bezpieczeństwo. Kerberos umożliwia wzajemne uwierzytelnianie między klientem a serwerem. W tym systemie prośba klienta o bilet jest przekazywana wraz z zapytaniem. Poprzednie wersje Hadoop miały kilka problemów, takich jak możliwość podszywania się pod swoją nazwę użytkownika przez ustawienie hadoop.job.ugiwłaściwości, a także operacje MapReduce uruchamiane przez tego samego użytkownika: hadoop lub mapred. Dzięki integracji Hive w wersji 0.7.0 z zabezpieczeniami Hadoop problemy te zostały w dużej mierze rozwiązane. Zadania TaskTracker są uruchamiane przez użytkownika, który je uruchomił, a nazwa użytkownika nie może być już sfałszowana przez ustawienie hadoop.job.ugiwłaściwości. Uprawnienia dla nowo utworzonych plików w Hive są dyktowane przez system HDFS . Model autoryzacji rozproszonego systemu plików Hadoop korzysta z trzech jednostek: użytkownika, grupy i innych z trzema uprawnieniami: odczytu, zapisu i wykonywania. Domyślne uprawnienia dla nowo utworzonych plików można ustawić, zmieniając wartość umask zmiennej konfiguracyjnej Hive hive.files.umask.value.

Zobacz też

Bibliografia

Zewnętrzne linki