Какво е Hive? Archiтекстура и режими

⚡ Умно обобщение

Hive е SQL слоят на екосистемата Hadoop, превръщайки HiveQL операторите в разпределени задачи, които четат структурирани данни, вече намиращи се на HDFS, така че анализаторите заявяват петабайтови таблици, без сами да пишат MapReduce код.

  • ???? Какво е: ETL инструмент и инструмент за съхранение на данни, който добавя таблици, редове и колони върху файлове, съхранявани в HDFS.
  • 🗂️ Метасторе: Информацията за схемата се съхранява в релационен метахранилище, поддържано от Derby за един потребител и от MySQL за споделен достъп.
  • 🆚 Срещу RDBMS: Hive валидира схемата при четене, мащабира хоризонтално и предпочита големи сканирания пред актуализациите на ниво ред, които базата данни обработва.
  • 🏗️ Три слоя: Клиентите, услугите и хранилището формират архитектурата, като драйверът координира компилатора, метахранилището и механизма за изпълнение.
  • 🔀 Два режима: Локалният режим е подходящ за един възел с данни и малки файлове, докато режимът MapReduce разпределя изпълнението в клъстер с множество възли.
  • 🔌 HiveServer2: Базираният на Thrift HS2 интерфейс добавя едновременност и удостоверяване на множество клиенти за отдалечени сесии.

Архитектура и режими на кошера

Какво е Hive?

Hive е ETL и инструмент за съхранение на данни, разработен върху Hadoop Distributed File System (HDFS). Hive улеснява извършването на операции като

  • Капсулиране на данни
  • Ad-hoc заявки
  • Анализ на огромни масиви от данни

Важни характеристики на Hive

Точките по-долу обясняват какво отличава Hive от обикновена MapReduce програма.

  • В Hive първо се създават таблици и бази данни и след това данните се зареждат в тези таблици.
  • Hive е хранилище за данни, предназначено за управление и заявки само до структурирани данни, съхранявани в таблици.
  • Докато работи със структурирани данни, MapReduce няма функции за оптимизация и използваемост като UDF, но рамката Hive има. Оптимизацията на заявки се отнася до ефективен начин за изпълнение на заявки по отношение на производителността.
  • Вдъхновеният от SQL език на Hive отделя потребителя от сложността на програмирането с MapReduce. Той използва повторно познати концепции от света на релационните бази данни, като таблици, редове, колони и схеми, за по-лесно усвояване.
  • Програмирането на Hadoop работи с плоски файлове. Така че Hive може да използва структури от директории, за да „дял“ данни за подобряване на производителността при определени заявки.
  • Важен компонент на Hive е метахранилището, използвано за съхраняване на информация за схемата. Това метахранилище обикновено се намира в релационна база данни. Можем да взаимодействаме с Hive, използвайки методи като
    • Уеб GUI
    • Java Интерфейс за свързване на бази данни (JDBC).
  • Повечето взаимодействия обикновено се осъществяват през интерфейс на командния ред (CLI). Hive предоставя CLI за писане на Hive заявки, използвайки Hive Query Language (HQL).
  • Като цяло синтаксисът на HQL е подобен на SQL синтаксис, с който повечето анализатори на данни са запознати. Примерната заявка по-долу показва всички записи, присъстващи в споменатото име на таблица.
    • Примерна заявка : Изберете * от
  • Hive поддържа четири файлови формата, а именно TEXTFILE, SEQUENCEFILE, ORC и RCFILE (Запис на колонен файл).
  • За съхранение на метаданни за един потребител, Hive използва базата данни Derby, а за съхранение на метаданни за множество потребители или споделени метаданни Hive използва MySQL.

За настройка MySQL като базата данни и за съхраняване на метаданни, вижте урока за конфигуриране на метахранилището на Hive с MySQL, което е продължение на Ръководство за инсталиране на кошер.

Някои от ключовите точки за Hive:

  • Основната разлика между HQL и SQL е, че заявката към Hive се изпълнява върху инфраструктурата на Hadoop, а не върху традиционна база данни.
  • Изпълнението на заявка в Hive е поредица от автоматично генерирани MapReduce работни места.
  • Hive поддържа концепции за дялове и кофи за лесно извличане на данни, когато клиентът изпълнява заявката.
  • Hive поддържа персонализирани настройки UDF (потребителски дефинирани функции) за почистване на данни, филтриране и подобна работа. Според изискванията на програмистите, могат да се дефинират Hive UDF.

Кошер срещу релационни бази данни

Hive изпълнява функции, които релационните бази данни не могат. Когато данните са в петабайти, връщането на резултати за секунди е важно и Hive прави това ефективно. Ключовите разлики са следните.

Релационните бази данни са от „схема при четене и схема при запис“: първо се създава таблица, след което в нея се вмъкват данни. В релационните таблици на базата данни могат да се извършват функции като вмъкване, актуализиране и модификации.

Кошерът е „схема само за четене“Така че функции като актуализиране и модификация не работеха в ранните версии, защото заявка към Hive в типичен клъстер се изпълнява в множество DataNode, което правеше невъзможно актуализирането и модифицирането на данни в множество възли (Hive версии под 0.13).

Hive също така поддържа „Прочетете много, пишете веднъж“ шаблон, така че в по-новите версии таблицата може да бъде актуализирана след вмъкване.

ЗАБЕЛЕЖКА: По-новите версии на Hive идват с актуализирани функции. Hive 0.14 въведе UPDATE и DELETE като нови функции, а по-късните версии добавиха пълна поддръжка на ACID транзакции.

Таблицата по-долу обобщава сравнението.

Аспект Релационна база данни Apache Hive
Валидиране на схемата При писане При четене
Типичен обем данни Гигабайти в терабайти Терабайти в петабайти
Натоварване OLTP чете и пише на ниво ред Пълно сканиране на пакетен анализ
Език за заявки SQL HQL, диалект, вдъхновен от SQL
Изпълнение Двигател на база данни Разпределени клъстерни задачи

Кошер Archiтекстура

Диаграмата по-долу обяснява Apache Архитектура на кошера в детайли.

Диаграма на архитектурата на Apache Hive, показваща клиенти, услуги, съхранение и изчисления

Кошерът се състои главно от 3 основни части:

  1. Клиенти на кошера
  2. Услуги за кошери
  3. Съхранение и изчисления в кошера

Клиенти на Hive

Hive предоставя различни драйвери за комуникация с различни видове приложения. За приложения, базирани на Thrift, той предоставя Thrift клиент за комуникация.

За Java За свързани приложения, той предоставя JDBC драйвери. За всеки друг тип приложение, той предоставя ODBC драйвери. Тези клиенти и драйвери от своя страна комуникират със сървъра на Hive в услугите на Hive.

Hive Services

Взаимодействията на клиента с Hive се осъществяват чрез Hive услугите. Ако клиентът иска да извърши някаква операция, свързана със заявки, в Hive, той трябва да комуникира чрез Hive услугите.

CLI действа като услуга на Hive за DDL операции. Всички драйвери комуникират със сървъра на Hive и главния драйвер в услугите на Hive, както е показано на архитектурната диаграма по-горе.

Драйверът в услугите на Hive е основният драйвер: той комуникира с JDBC, ODBC и други специфични за клиента приложения, след което предава техните заявки към метахранилището и файловата система за по-нататъшна обработка.

Съхранение и компютри в Hive

Услугите на Hive, като метахранилището, файловата система и клиентът на заданието, от своя страна комуникират със хранилището на Hive и извършват следните действия:

  • Метаданните за таблици, създадени в Hive, се съхраняват в Hive. база данни за метахранилища.
  • Резултатите от заявките и данните, заредени в таблиците, се съхраняват в клъстера Hadoop на HDFS.

Поток на изпълнение на задачата

Диаграмата по-долу tracизвършва една заявка от потребителския интерфейс към DataNodes и обратно.

Диаграма на потока за изпълнение на задачата на Hive tracизпращане на заявка от потребителския интерфейс към DataNodes

От горната диаграма можем да разберем потока на изпълнение на задачи в Hive с Hadoop. Потокът от данни в Hive се държи по следния модел.

  1. Изпълнение на заявка от потребителския интерфейс (UI)
  2. Драйверът взаимодейства с компилатора, за да получи плана. (Тук планът се отнася до процеса на изпълнение на заявката и свързаното с него събиране на метаданни.)
  3. Компилаторът създава план за изпълнение на задачата. Компилаторът комуникира с метахранилището, за да получи заявката за метаданни.
  4. Метахранилището изпраща информация за метаданни обратно на компилатора
  5. Компилаторът комуникира с драйвера с предложения план за изпълнение на заявката.
  6. Драйверът изпраща планове за изпълнение към механизма за изпълнение
  7. Изпълнителният механизъм (EE) действа като мост между Hive и Hadoop за обработка на заявката, включително DFS операциите:
    • EE първо се свързва с NameNode, а след това с DataNode, за да получи стойностите, съхранени в таблиците.
    • EE извлича желаните записи от DataNode-ите. Действителните данни от таблицата се намират само във възлите с данни; от NameNode извлича само метаданни за заявката.
    • Събира действителни данни от възлите за данни, свързани със споменатата заявка
    • EE комуникира двупосочно с метахранилището, за да извършва DDL (език за дефиниране на данни) операции, като например СЪЗДАВАНЕ, ИЗПУСКВАНЕ и ПРОМЯНА върху таблици и бази данни. Метахранилището съхранява само имена на бази данни, таблици и колони.
    • EE от своя страна комуникира с демони на Hadoop, като NameNode, DataNodes и job. tracker за изпълнение на заявката върху файловата система Hadoop
  1. Извличане на резултати от драйвера
  2. Изпращане на резултати към изпълнителния механизъм. След като резултатите бъдат извлечени от възлите за данни към EE, той ги изпраща обратно към драйвера и към потребителския интерфейс (front-end).

Hive поддържа връзка с файловата система Hadoop и нейните демони чрез механизма за изпълнение. Пунктираната стрелка на диаграмата показва тази комуникация.

Различни режими на Hive

Hive може да работи в два режима в зависимост от размера на възлите за данни в Hadoop. Тези режими са:

  • Местен режим
  • Режим MapReduce

Кога да използвате локален режим

  • Ако Hadoop е инсталиран в псевдоразпределен режим с един възел за данни, използваме Hive в този режим.
  • Ако размерът на данните е достатъчно малък, за да бъде ограничен до една локална машина, можем да използваме този режим
  • Обработката ще бъде много бърза на по-малки набори от данни, налични в локалната машина

Кога да използвате режим MapReduce

  • Ако Hadoop има множество възли за данни и данните са разпределени между различните възли, използваме Hive в този режим.
  • Изпълнява се с големи количества данни и заявката се изпълнява паралелно.
  • Чрез този режим може да се постигне обработка на големи набори от данни с по-добра производителност

В Hive можем да зададем свойство, което да указва в кой режим Hive трябва да работи. По подразбиране работи в режим MapReduce, а за локален режим можете да използвате следната настройка:

SET mapred.job.tracker=local;

От версия 0.7 на Hive нататък се поддържа режим, който автоматично изпълнява MapReduce задачи в локален режим. В Hive 4.x енджинът по подразбиране е Apache Tez, така че това свойство се отнася за стария път MapReduce.

Какво е Hive Server2 (HS2)?

HiveServer2 (HS2) е сървърен интерфейс, който изпълнява следните функции:

  • Позволява на отдалечени клиенти да изпълняват заявки срещу Hive
  • Извлича резултатите от тези заявки

Текущите версии добавят разширени функции, базирани на Thrift RPC, като например:

  • Мултиклиентска паралелност
  • заверка

HS2 стои зад Beeline и всяка JDBC или ODBC сесия, поради което замени еднопотребителския Hive CLI. HiveQL оператори и вградени функции препратката е естествената следваща стъпка.

Въпроси и Отговори

Hive е пакетен слой за заявки, който сканира големи таблици чрез разпределени задачи. HBase е NoSQL хранилище, създадено за милисекундни произволни четения и записи на единични редове. Те решават противоположни модели на достъп и често работят едновременно.

Hive работи на MapReduce, Apache Tez или Apache SparkMapReduce е остарял и Hive 4.x по подразбиране използва Tez, който запазва междинните резултати в паметта, вместо да ги записва на диск между етапите.

Управляваната таблица дава на Hive собственост върху метаданните и файловете, така че премахнетеping изтрива данните от директорията на хранилището. Външна таблица съхранява само метаданни и премахваping оставя основните файлове недокоснати.

Моделите на научените разходи подават статистически данни за изпълнението обратно в планиращия орган, за да предскажат обема на сканиране, реда на присъединяване и подрязването на дялове по-точно от статичните оценки. Облачните платформи предоставят същите сигнали като препоръките за уплътняване и оформление на дялове.

Copilot изготвя HiveQL joins, функции за прозорци и Java UDF скелети от коментар, което съкращава работата по шаблонния шаблон. Имената на колоните, ключовете на дяловете и типовете данни все още трябва първо да се проверят спрямо реалното метахранилище.

Да. Hive 0.14 добави UPDATE и DELETE, а по-късните версии предоставиха пълна ACID поддръжка за транзакционни таблици. Hive 4.x разширява това чрез таблици на Apache Iceberg с изолиране на моментни снимки и еволюция на схемата.

И трите предоставят SQL достъп до едни и същи файлове. Hive предпочита дълги пакетни задачи и притежава метахранилище, което останалите четат. Spark SQL е подходящ за смесени конвейери; Trino е насочен към интерактивни заявки в няколко източника.

Да, до голяма степен чрез Hive Metastore, който остава стандартът за каталога Spark, Trino, Presto и Flink всички четат. Самият Hive все още обслужва планирани пакетни трансформации и складови товари.

Обобщете тази публикация с: