Открыть сервис

Hive

Hive — это открытая распределённая система управления базами данных на основе Apache Hadoop, предназначенная для организации хранилищ данных, выполнения аналитических запросов и обработки больших объёмов информации (Big Data). Hive предоставляет язык запросов, похожий на SQL, называемый HiveQL (Hive Query Language), который транслируется в задачи MapReduce, Tez или Spark, выполняемые в кластере Hadoop. Система была разработана в компании Facebook (организация Meta признана экстремистской и запрещена в РФ) и впоследствии передана в фонд Apache Software Foundation, где стала одним из ключевых компонентов экосистемы Hadoop.

История

Разработка Hive началась в 2007 году в Facebook (организация Meta признана экстремистской и запрещена в РФ) для решения задач анализа больших данных, которые накапливались в социальной сети. Изначально система создавалась как внутренний инструмент, позволяющий аналитикам, не владеющим Java и MapReduce, выполнять запросы к данным, хранящимся в Hadoop Distributed File System (HDFS). Первая версия Hive была выпущена в 2008 году, а в 2010 году проект был передан в Apache Software Foundation и получил статус инкубационного. В 2012 году Hive стал проектом верхнего уровня Apache.

С момента появления Hive прошёл несколько этапов развития. Первоначально он использовал только MapReduce в качестве исполнительного движка, что обеспечивало высокую масштабируемость, но приводило к значительным задержкам выполнения запросов. В версии 0.13 (2014 год) была добавлена поддержка Apache Tez — более эффективного движка, снижающего накладные расходы на запуск задач. В версии 1.2 (2015 год) появилась возможность использования Apache Spark в качестве альтернативного исполнительного движка. В версии 2.0 (2016 год) была введена поддержка ACID-транзакций, что позволило выполнять операции вставки, обновления и удаления данных. В версии 3.0 (2018 год) была реализована поддержка LLAP (Live Long and Process) — кэширования и ускорения выполнения запросов.

Архитектура

Hive состоит из нескольких основных компонентов, взаимодействующих между собой:

Hive Metastore

Metastore — центральный репозиторий метаданных, в котором хранится информация о структуре таблиц, их схемах, расположении данных в HDFS, а также о разделах (partitions) и сегментах (buckets). Metastore может быть настроен в одном из трёх режимов:

  • Встроенный (embedded) — использует базу данных Derby, работает в том же процессе, что и Hive. Подходит для тестирования и разработки.
  • Локальный (local) — использует внешнюю реляционную базу данных (MySQL, PostgreSQL, Oracle), но запускается в том же процессе, что и Hive.
  • Удалённый (remote) — Metastore работает как отдельный сервис (Thrift-сервер), к которому могут подключаться несколько клиентов Hive. Этот режим рекомендуется для производственных сред.

Hive Driver

Драйвер (Driver) — компонент, который получает HiveQL-запрос от пользователя, компилирует его в план выполнения, оптимизирует и передаёт на выполнение. В процессе компиляции драйвер взаимодействует с Metastore для получения метаданных, а затем генерирует последовательность задач MapReduce, Tez или Spark.

Hive Server2

HiveServer2 — сервер, обеспечивающий многопользовательский доступ к Hive через протокол Thrift. Он поддерживает аутентификацию, авторизацию и шифрование соединений. Клиенты могут подключаться к HiveServer2 с помощью различных инструментов: Beeline (командная строка), JDBC/ODBC-драйверов, а также через веб-интерфейс Hue.

Исполнительные движки

Hive поддерживает три основных исполнительных движка:

  • MapReduce — классический движок Hadoop, выполняющий запросы в виде последовательности Map и Reduce задач. Обеспечивает максимальную масштабируемость, но имеет высокую задержку.
  • Tez — более эффективный движок, который строит граф задач (DAG) и минимизирует промежуточные операции записи на диск. Tez позволяет выполнять запросы в несколько раз быстрее, чем MapReduce.
  • Spark — движок, работающий в памяти, что обеспечивает ещё более высокую скорость выполнения запросов, особенно для итеративных алгоритмов и машинного обучения.

Язык запросов HiveQL

HiveQL — это язык запросов, синтаксически близкий к SQL, но с рядом отличий, обусловленных спецификой работы с большими данными. Основные возможности HiveQL:

Определение данных (DDL)

Пользователь может создавать, изменять и удалять таблицы, представления, индексы и функции. Таблицы в Hive могут быть:

  • Внутренние (managed) — данные управляются Hive, при удалении таблицы данные также удаляются из HDFS.
  • Внешние (external) — данные хранятся вне Hive, при удалении таблицы метаданные удаляются, но данные в HDFS сохраняются.

Манипуляция данными (DML)

HiveQL поддерживает операции загрузки данных из файлов (LOAD DATA), вставки данных из других таблиц (INSERT ... SELECT), а также, начиная с версии 2.0, операции UPDATE и DELETE при включённой поддержке ACID.

Запросы (SELECT)

HiveQL поддерживает стандартные операции SQL: SELECT, JOIN, GROUP BY, ORDER BY, SORT BY, DISTRIBUTE BY, CLUSTER BY, подзапросы, оконные функции, агрегатные функции, а также пользовательские функции (UDF, UDAF, UDTF).

Особенности

В отличие от традиционных реляционных СУБД, Hive не поддерживает транзакции в реальном времени (OLTP) и не предназначен для выполнения частых точечных запросов. Hive ориентирован на пакетную обработку и аналитические запросы (OLAP), которые могут выполняться от нескольких секунд до нескольких часов.

Форматы хранения данных

Hive поддерживает несколько форматов хранения данных, которые влияют на производительность запросов и эффективность сжатия:

  • TextFile — текстовый формат (CSV, TSV, JSON). Прост в использовании, но неэффективен по памяти и скорости.
  • SequenceFile — бинарный формат Hadoop, поддерживающий сжатие на уровне блоков.
  • RCFile (Record Columnar File) — столбцовый формат, который хранит данные в виде строк, но сгруппированных по столбцам. Улучшает производительность запросов, читающих только часть столбцов.
  • ORC (Optimized Row Columnar) — оптимизированный столбцовый формат, разработанный специально для Hive. ORC обеспечивает высокую степень сжатия, поддержку индексов и быстрый доступ к данным.
  • Parquet — столбцовый формат, разработанный совместно с Apache Hadoop. Parquet широко используется в экосистеме Hadoop и поддерживается многими инструментами, включая Spark, Impala, Presto.

Применение

Hive используется в различных областях, где требуется анализ больших объёмов данных:

  • Бизнес-аналитика — построение отчётов, дашбордов и аналитических панелей на основе исторических данных.
  • Обработка логов — анализ журналов веб-серверов, приложений, сетевых устройств.
  • Рекомендательные системы — обработка пользовательских данных для построения рекомендаций.
  • Финансовый анализ — выявление мошеннических операций, расчёт рисков.
  • Научные исследования — обработка данных геномики, астрономии, физики высоких энергий.

Преимущества и недостатки

Преимущества

  • Масштабируемость — Hive может обрабатывать петабайты данных, распределённые по тысячам узлов кластера.
  • Низкий порог входа — знание SQL позволяет аналитикам и разработчикам быстро начать работу с Hive.
  • Интеграция с экосистемой Hadoop — Hive легко взаимодействует с HDFS, HBase, Spark, Pig, Oozie и другими инструментами.
  • Гибкость — поддержка различных форматов данных, пользовательских функций и исполнительных движков.

Недостатки

  • Высокая задержка — даже при использовании Tez или Spark, Hive не подходит для запросов, требующих ответа в реальном времени.
  • Ограниченная поддержка транзакций — ACID-транзакции появились относительно поздно и имеют ограничения по производительности.
  • Сложность настройки — для достижения высокой производительности требуется тонкая настройка параметров Hive, Hadoop и исполнительных движков.

Сравнение с другими системами

Hive часто сравнивают с другими инструментами для работы с большими данными:

  • Apache Impala — система, также использующая SQL для запросов к данным в HDFS, но работающая в режиме реального времени (MOLAP). Impala обеспечивает меньшую задержку, но требует больше ресурсов памяти.
  • Apache Presto — распределённый SQL-движок, предназначенный для интерактивных запросов. Presto быстрее Hive, но менее зрелый в плане поддержки сложных операций.
  • Apache Spark SQL — компонент Spark, предоставляющий SQL-интерфейс. Spark SQL может быть быстрее Hive для итеративных задач, но требует, чтобы данные помещались в память.
  • Google BigQuery — облачная система, не требующая управления инфраструктурой, но привязывающая пользователя к облачной платформе Google.

Интересные факты

  • Hive был создан для решения реальной задачи Facebook (организация Meta признана экстремистской и запрещена в РФ) — анализа данных о поведении пользователей, которые накапливались со скоростью несколько терабайт в день.
  • Название «Hive» (улей) было выбрано как метафора распределённой системы, состоящей из множества «пчёл» (рабочих узлов), собирающих и обрабатывающих «мёд» (данные).
  • В 2014 году Facebook (организация Meta признана экстремистской и запрещена в РФ) передала Hive в Apache Software Foundation, что позволило проекту стать независимым и получить вклад от множества компаний, включая Netflix, LinkedIn, Yahoo! и другие.

Источники

  • Apache Hive Project Documentation
  • «Hive: The Definitive Guide» by Edward Capriolo, Dean Wampler, Jason Rutherglen
  • «Programming Hive» by Edward Capriolo, Dean Wampler, Jason Rutherglen
  • Apache Software Foundation — Hive Release Notes

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →