Какой вычислительный движок использует hive
Перейти к содержимому

Какой вычислительный движок использует hive

  • автор:

Какая взаимосвязь между Hive и прочими компонентами?

Hive — это подпроект Apache Hadoop. Hive использует HDFS в качестве системы хранения файлов. Hive обрабатывает и анализирует структурированные данные, а HDFS обеспечивает надежное хранение данных. Все файлы в базе данных Hive хранятся в HDFS и все операции с данными в Hive выполняет с помощью HDFS API.

Взаимосвязь между Hive и MapReduce

Вычисление данных Hive зависит от MapReduce. MapReduce — это также подпроект Apache Hadoop, является параллельным вычислительным фреймворком, основанным на HDFS. Во время анализа данных Hive преобразует инструкции HiveQL, загруженные пользователями, в задания MapReduce и отправляет их на выполнение в MapReduce.

Взаимосвязь между Hive и DBService

MetaStore (сервис метаданных) Hive обрабатывает структурную и атрибутивную информацию о базах данных, таблицах и разделах Hive. Эта информация должна храниться в реляционной базе данных, а обслуживаться и обрабатываться в MetaStore. В MRS реляционная база данных поддерживается компонентом DBService.

Взаимосвязь между Hive и Spark

Вычисление данных Hive может быть реализовано также на Spark. Spark — это проект Apache. Это распределенная вычислительная структура, основанная на памяти. Во время анализа данных Hive преобразует инструкции HiveQL, загруженные пользователями, в задания Spark и отправляет их на выполнение в Spark.

Что такое Apache Hive?

Apache Hive – это распределенная, отказоустойчивая система хранения данных, которая позволяет проводить аналитику в огромных масштабах. Хранилище данных обеспечивает централизованное хранение информации, которую можно легко анализировать для принятия обоснованных решений на основе данных. Hive позволяет пользователям читать, записывать и управлять петабайтами данных с помощью SQL.

Система Hive создана на основе Apache Hadoop – платформы с открытым исходным кодом, которая используется для эффективного хранения и обработки больших наборов данных. Благодаря этому система Hive тесно интегрирована с Hadoop и предназначена для быстрой работы с петабайтами данных. Уникальность Hive заключается в возможности запрашивать большие наборы данных за счет применения Apache Tez или MapReduce с интерфейсом, похожим на SQL.

Как работает Hive?

Цель создания Hive – дать возможность пользователям, осведомленным в SQL, без знаний о программировании работать с петабайтами данных с помощью похожего на SQL интерфейса HiveQL. Традиционные реляционные базы данных предназначены для отправки интерактивных запросов к небольшим и средним наборам данных и плохо обрабатывают большие наборы данных. Hive же использует пакетную обработку для быстрой работы в очень большой распределенной базе данных. Hive преобразует запросы HiveQL в задания MapReduce или Tez, выполняемые на платформе для планирования распределенных задач Apache Hadoop – Yet Another Resource Negotiator (YARN). Инструмент запрашивает данные, хранящиеся в распределенном хранилище, например в распределенной файловой системе Hadoop (Hadoop Distributed File System, HDFS) или Amazon S3. Hive хранит метаданные своей базы данных и таблиц в хранилище метаданных – это хранилище на основе базы данных или файлов, которое дает возможность легко абстрагировать и находить данные.

Hive включает HCatalog – уровень управления таблицами и хранилищем, на котором данные считываются из метахранилища Hive для беспрепятственной интеграции между Hive, Apache Pig и MapReduce. Благодаря использованию этого метахранилища HCatalog дает возможность Pig и MapReduce использовать те же структуры данных, что и Hive, без необходимости повторного определения метаданных для каждого механизма. Настраиваемые приложения или сторонние интеграции могут использовать WebHCat – RESTful API для HCatalog – для доступа к метаданным Hive и их повторного использования.

В чем заключаются преимущества Hive?

Скорость

Система Hive разработана для быстрой обработки петабайтов данных путем пакетной обработки.

Знакомый интерфейс

Интерфейс Hive похож на знакомый SQL, что обеспечивает его доступность для пользователей, не связанных с программированием.

Масштабируемость

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

В чем разница между Apache Hive и Apache HBase?

Apache HBase – это распределенная база данных NoSQL, обеспечивающая произвольный, строго согласованный доступ к петабайтам данных в режиме реального времени. Apache Hive – это система распределенного хранилища данных, обеспечивающая возможности для выполнения запросов, похожих на SQL.

Характеристики

Apache Hive

Apache HBase

Функция

Механизм обработки запросов, похожих на SQL, предназначен для хранилищ больших объемов данных. Поддерживаются различные форматы файлов.

Распределенное хранилище на основе пар «ключ – значение» с низкой задержкой и настраиваемыми возможностями запросов. Данные хранятся в формате, ориентированном на работу со столбцами.

Тип обработки

Пакетная обработка с использованием вычислительных платформ Apache Tez или MapReduce.

Обработка в режиме реального времени.

Задержка

От средней до высокой, в зависимости от скорости отклика вычислительного механизма. Модель распределенного выполнения обеспечивает превосходную производительность по сравнению с монолитными системами запросов, например RDBMS, для тех же объемов данных.

Низкая, но может быть непостоянной. Структурные ограничения архитектуры HBase могут привести к скачкам задержек при интенсивных нагрузках для выполнения записи.

Интеграция с Hadoop

Это надстройка сервиса Hadoop, использующая Apache Tez или MapReduce для обработки данных и HDFS или Amazon S3 для хранения данных.

Это надстройка HDFS или Amazon S3.

Поддержка SQL

Предоставляет возможности для выполнения запросов, похожих на SQL, с помощью HiveQL.

Поддержка запросов SQL сама по себе отсутствует. Для выполнения запросов SQL можно использовать Apache Phoenix.

Схема

Определенная схема для всех таблиц.

Типы данных

Поддерживает структурированные и неструктурированные данные. Обеспечивает встроенную поддержку для распространенных типов данных SQL, таких как INT, FLOAT и VARCHAR.

Поддерживает только неструктурированные данные. Пользователь определяет сопоставления полей данных с типами данных, поддерживаемыми Java.

Каковы примеры использования Hive?

Компания Guardian обеспечивает безопасность 27 миллионов участников на достойном уровне за счет продуктов и услуг по страхованию и управлению капиталом. Компания Guardian использует Amazon EMR для запуска Apache Hive на базе озера данных S3. Apache Hive используется для пакетной обработки. Озеро данных S3 служит основой цифровой платформы Guardian Direct, которая дает потребителям возможность изучать и покупать продукты Guardian и сторонних производителей в страховом секторе.

Агентство по регулированию деятельности финансовых институтов (FINRA) – это крупнейший независимый орган контроля рынка ценных бумаг в США, который занимается отслеживанием и регулированием процедур финансовой торговли. Агентство FINRA использует Amazon EMR для запуска Apache Hive на базе озера данных S3. За счет запуска Hive в кластерах EMR агентство FINRA получает возможность обрабатывать и анализировать данные о торговле (до 90 миллиардов событий) с помощью SQL. Благодаря облачному озеру данных удалось сэкономить до 20 миллионов долларов США по сравнению с локальным решением FINRA и значительно сократить время, необходимое для восстановления и обновления.

Vanguard – зарегистрированный в США консультант по инвестициям, крупнейший поставщик паевых инвестиционных фондов и второй по величине поставщик биржевых фондов. Компания Vanguard использует Amazon EMR для запуска Apache Hive на базе озера данных S3. Данные хранятся в S3, и EMR создает на их основе метахранилище Hive. Хранилище метаданных Hive содержит все метаданные о данных и таблицах кластера EMR, что упрощает анализ данных. Hive также дает аналитикам возможность выполнять специальные SQL-запросы к данным, хранящимся в озере данных S3. Благодаря переходу на озеро данных S3 с помощью Amazon EMR более чем 150 аналитикам данных удалось повысить эффективность работы и снизить затраты на EC2 и EMR на 600 000 долларов США.

Как AWS может поддерживать Hive?

Сервис Amazon EMR предоставляет самую простую, быструю и экономичную управляемую платформу Hadoop, на которой пользователи могут обрабатывать огромные объемы данных в динамически масштабируемых инстансах EC2. Пользователи также могут запускать в EMR другие популярные распределенные платформы, такие как Apache Hive, Spark, HBase, Presto и Flink.

Создайте бесплатный аккаунт AWS и начните работу с Apache Hive на базе AWS уже сегодня.

Hive vs Impala: сходства и различия SQL-инструментов для Apache Hadoop

В прошлой статье мы рассмотрели основные возможности и ключевые характеристики Apache Hive и Cloudera Impala. Сегодня подробнее поговорим про то, что между ними общего и чем отличаются друг от друга эти SQL-инструменты для обработки больших данных (Big Data), хранящихся в кластере Hadoop.

Что общего между Apache Hive и Cloudera Impala: 5 главных сходств

Сначала поговорим о том, чем похожи рассматриваемые SQL-инструменты для Apache Hadoop. Проанализировав их основные функциональные возможности и примеры использования, мы выделили следующие общие характеристики:

· прикладное назначение — Hive и Impala, в первую очередь, ориентированы на аналитическую обработку данных, хранящихся в экосистеме Hadoop (HDFS, HBase) и некоторых других распределенных файловых системах (Amazon S3) [1].

· Обе системы представляют собой решения с открытым исходным кодом и свободно распространяются по лицензии Apache Software Foundation (ASF). Тем не менее, изначально Impala является продуктом компании Cloudera, тогда как Hive была разработана корпорацией Facebook в 2010 году, а затем передана фонду ASF [2].

· SQL-подобный синтаксис (Hive SQL) — Impala использует те же метаданные, драйвер ODBC, пользовательский интерфейс и SQL-подобный язык запросов (HiveQL), что и Apache Hive [3].

· Использование YARN в качестве кластерного менеджера ресурсов, который позволяет управлять всеми ресурсами обработки данных в кластере, назначая их запрашивающим приложениям, таким образом, поддерживая баланс выполнения заданий в распределенной среде [4].

· Распространение коммерческих дистрибутивов от компании Cloudera, которая поглотила корпорацию Hortonworks, ранее продвигавший Apache Hive.

Архитектура Cloudera Impala

В чем разница между Hive и Impala: 10 ключевых отличий

При всех вышеотмеченных сходствах, рассматриваемые SQL-инструменты для Apache Hadoop существенно отличаются друг от друга по следующим параметрам:

· Режим обработки данных — Impala обрабатывает SQL-запросы на лету, реализуя интерактивные вычисления в режиме онлайн, тогда как Hive не походит для OLTP-задач, т.к. работает с пакетами данных не в реальном времени [5].

· Языки разработки — Hive написан на Java, тогда как Impala — на C++. Это обусловливает более эффективное использование памяти в Impala, несмотря на то в Hive повторно используются экземпляры JVM (Java Virtual Machine), чтобы частично снизить накладные расходы при запуске виртуальной машины. Однако, Impala, разработанный на C ++, иногда может не работать с форматами, написанными на Java [5].

· Форматы данных — Impala работает с форматами LZO, Avro и Parquet, а Hive — c Plain Text и ORC. При этом обе рассматриваемые системы поддерживают форматы RCFIle и Sequence.

· Вычислительная модель — Impala основана на архитектуре массовой параллельной обработки (MPP, Massive Parallel Processing), благодаря чему реализуется распределенное многоуровневое обслуживание дерева для отправки SQL-запросов с последующей агрегацией результатов из его листьев [5]. Также MPP позволяет Impala распараллеливать обработку данных, поддерживая интерактивные вычисления. В свою очередь, Hive используется технологию MapReduce, преобразуя SQL-запросы в задания Apache Spark или Hadoop [1].

· Задержка обработки данных (latency) — в связи с разными вычислительными моделями, рассматриваемые системы по-разному обрабатывают информацию. Cloudera Impala выполняет SQL-запросы в режиме реального времени. Для Apache Hive характерна высокая временная задержка и низкая скорость обработки данных. Impala способна работать в 6–69 раз быстрее Hive с простыми SQL-запросами. Однако, со сложными запросами Hive справляется лучше благодаря LLAP [1].

· Пропускная способность Hive существенно выше, чем у Impala [6]. LLAP-функция (Live Long and Process), которая разрешает кэширование запросов в памяти, обеспечивает Hive хорошую производительность на низком уровне. LLAP включает долговременные системные службы (демоны), что позволяет напрямую взаимодействовать с узлами данных HDFS и заменяет тесно интегрированную DAG-структуру запросов (Directed acyclic graph) — графовую модель, активно используемую в Big Data вычислениях [1].

· Кодогенерация — Hive генерирует выражения запросов во время компиляции (compile time), тогда как Impala — во время выполнения (runtime). Для Hive характерна проблема «холодного старта», когда при первом запуске приложения запросы выполняются медленно из-за необходимости установки подключения к источнику данных. В Impala отсутствуют подобные накладные расходы при запуске, т.к. необходимые системные службы (демоны) для обработки SQL-запросов запускаются во время загрузки (boot time), что ускоряет работу [1].

· Отказоустойчивость — Hive является отказоустойчивой системой, которая сохраняет все промежуточные результаты. Это также положительно влияет на масштабируемость, однако приводит к снижению скорости обработки данных. В свою очередь, Impala нельзя назвать отказоустойчивой платформой [1].

· Безопасность — в Hive отсутствуют инструменты обеспечения кибербезопасности, тогда как Impala поддерживает аутентификацию Kerberos [6].

· Основные пользователи — с учетом отказоустойчивости и высокой пропускной способности Hive, эта система более адаптирована для промышленной эксплуатации в условиях высоких нагрузок, когда допустима некоторая временная задержка (latency). Поэтому Hive в большей степени востребована у инженеров больших данных (Data Engineer) в рамках построения сложных ETL-конвейеров. А быстрая и безопасная, но не слишком надежная Impala лучше подходит для менее масштабных проектов и пользуется популярностью у аналитиков и ученых по данным (Data Analyst, Data Scientist) [6].

Архитектура Apache Hive

Таким образом, рассмотренные сходства и различия Cloudera Impala и Apache Hive подтверждают, что данные SQL-инструменты для аналитической обработки данных, хранящихся в экосистеме Hadoop, не конкурируют, а дополняют друг друга. В следующей статье мы подробнее рассмотрим разницу их использования и работы с точки зрения разработчика Big Data: процесс генерации и выполнения запросов, потребление памяти, расширяемость и другие аспекты, важные для программиста.

Узнайте больше про аналитику больших данных с помощью этих SQL-инструментов на наших практических курсах в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов (менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data) в Москве:

Источники

Что такое HiveQL: SQL для Big Data в Apache Hadoop — как работают Hive и Impala

Мы уже разобрали, что общего между Apache Hive и Cloudera Impala. В этой статье рассмотрим работу этих систем с точки зрения программиста, а также поговорим про язык HiveQL. Читайте в сегодняшнем материале, как эти системы выполняют SQL-запросы для аналитики больших данных (Big Data), хранящихся в кластере Hadoop.

Что такое HiveQL, зачем он нужен и чем отличается от классического SQL

Напомним, среда Hadoop неэффективна в интерактивной (потоковой) обработке масштабных структурированных данных из-за пакетной специфики вычислительной модели MapReduce, которая не позволяет выполнять сложные аналитические запросы в режиме реального времени с максимально допустимой задержкой в несколько миллисекунд. Эта проблема успешно решается в реляционных OLTP-системах с помощью SQL-запросов, которые дают разработчику возможность формулировать задачи на декларативном языке высокого уровня и оставлять детали оптимизации внутреннему механизму.

В Apache Hive и Cloudera Impala запросы к данным, хранящимся в Hadoop, реализуются на SQL-подобном декларативном языке Hive Query Language (HiveQL), который является подмножеством SQL92. Однако, в ряде случаев HiveQL отличается от стандартного SQL, в частности [1]:

· разные способы определения операций join для максимальной производительности;

· в HiveQL нет некоторых функций, операций и операторов SQL (UPDATE и DELETE statements, INSERT для отдельных строк);

· HiveQL позволяет вставлять пользовательский код для ситуаций, которые не вписываются в типовой SQL, предоставляя соответствующие инструменты для обработки входа и выхода — определенные пользователем функции: User Defined Function (UDF), User Defined Aggregate Function (UDAF), User Defined Tabular Function (UDTF);

· HiveQL не поддерживает типы данных даты и времени, т.к. они рассматриваются как строки.

Как и в SQL, в HiveQL имеется собственные парсер, планировщик, исполнитель и оптимизатор запросов, который ускоряет трансляцию запроса в исполняемый код, о чем мы рассказывали здесь на примере Catalyst — оптимизатора Apache Spark. Хайв и Импала по-разному работают с HiveQL, реализуются свои механизмы выполнения запросов, которые мы рассмотрим далее.

Как выполняется SQL-запрос в Cloudera Impala

Импала выполняет структурированные запросов к данным, хранящимся в Apache Hadoop, последовательно в несколько этапов [2]:

1. Big Data приложение со стороны пользователя отправляет SQL-запрос в Impala через ODBC или JDBC. Эти драйверы предоставляют стандартизованные интерфейсы запросов, благодаря чему пользовательское приложение может подключаться к любой системной службе Импала (impala daemon, impalad) в кластере. Далее этот impalad становится координатором текущего запроса.

2. Импала анализирует SQL-запрос, чтобы определить, какие задачи должны выполняться impalad-экземплярами в кластере. С учетом оптимальной эффективности планируется выполнение запроса.

3. Доступ impalad к данным в HDFS и HBase осуществляется напрямую локальными экземплярами сервисов для предоставления данных.

4. Каждый daemon возвращает данные координирущему impalad, который отправляет эти результаты клиенту в пользовательское приложение.

Отметим, что Impala избегает любых возможных накладных расходов при запуске, поскольку все процессы системных демонов запускаются непосредственно во время загрузки. Это существенно экономит время выполнения запроса. Дополнительное повышение скорости работы Импала обусловлено тем, что этот SQL-инструмент для Hadoop, в отличие от Hive, не сохраняет промежуточные результаты и обращается напрямую к HDFS или HBase. Кроме того, Impala генерирует программный код во время исполнения (runtime), а не при компиляции (compile time), как это делает Hive. Однако, побочным эффектом такой высокой скорости работы Impala является понижение надежности. В частности, если во время выполнения SQL-запроса узел данных отключится, экземпляр Импала запустится заново, а Hive продолжит держать соединение с источником данных, обеспечивая отказоустойчивость [3].

При кодогенерации во время выполнения программы в Impala используется LLVM (Low Level Virtual Machine) — проект инфраструктуры для создания компиляторов и сопутствующих утилит. Этот компилятор на виртуальной машине с RISC-подобными инструкциями генерирует оптимальный код выполнения SQL-запроса, представляя собой набор компиляторов из языков высокого уровня, системы оптимизации, интерпретации и компиляции в машинный код [4].

Как Cloudera Impala выполняет SQL-запросы к Apache Hadoop

Как работает Apache Hive: Big Data аналитика для Hadoop

Как в большинстве СУБД, в Hive есть несколько способов запуска SQL-запросов [5]:

· интерфейс командной строки — Hive Shell (CLI, Command Line Interface);

· подключение к БД через JDBC или ODBC с помощью драйвера Hive;

· использование клиента, установленного на уровне пользователя (среднее звено классической трехуровневой архитектуры). Этот клиент общается с сервисами Hive, работающими на сервере. Такой подход можно применять в приложениях, написанных на разных языках (C++, Java, PHP, Python, Ruby), используя эти клиентские языки со встроенным SQL для доступа к базам данных. По сути, таким образом реализуется web-UI Хайв.

Hive включает в себя следующие обязательные компоненты [5]:

· HCatalog для управления таблицами и хранилищами Hadoop, который снабжает пользователей различными инструментами обработки больших данных, включая MapReduce и Apache Pig для более простого чтения и записи данных.

· WebHCat предоставляет сервисы, которые можно использовать для запуска задач Hadoop MapReduce, Pig, заданий (jobs) или операций с метаданными Hive с помощью интерфейса HTTP в стиле REST.

Для доступа к метахранилищу (MetaStore) используется Apache Thrift — фреймворк удаленного вызова процедур (RPC, Remote Procedure Call), высокоуровневый язык описания интерфейсов, который позволяет определять и создавать службы под разные языки программирования [6].

Архитектура и принцип работы Apache Hive

Hive является средством трансляции SQL-запросов в задачи MapReduce: HiveQL-выражения преобразуются в задания MapReduce, которые выполняются в Apache кластере Hadoop и формируются в окончательный результат. Из-за этого даже простейшие запросы к таблице приводят к полному сканированию данных, содержащихся в ней. Это приводит к временной задержке при обработке данных. Что избежать такого полного сканирования данных, можно некоторые столбцы таблицы распределить по разным разделам (partition). Эта операция называется партиционирование и означает, что данные, относящиеся к разным колонкам, будут физически храниться в разных папках на HDFS. Партиционирование позволяет существенно сократить время исполнения SQL-запроса. Например, таким образом можно разделить хранимые логи по датам, что является частой задачей при анализе статистических данных с привязкой в временным периодам [5].

Партиционирование таблиц возможно и в Impala, однако при выделении разделов стоит помнить о размерах блока HDFS. Например, в случае таблиц из файлов Parquet размер блока HDFS составляет 256 МБ в Impala 2.0 и более поздних версиях. Таким образом, механизм секционирования (партиционирования) таблиц значительно повышает быстродействие HiveQL-запросов как в Хайв, так и в Импала [4].

Пример партиционирования таблиц в Apache Hive и Cloudera Impala

Наконец, резюмируя отличия Hive и Impala в плане выполнения SQL-запросов с точки зрения разработчика Big Data, отметим разницу в поддерживаемых типах данных. Хайв поддерживает все основные примитивные (integer, float и string), а также сложные типы данных (map, list и struct), в отличие от Impala [7]. В плане обеспечения информационной безопасности Импала и Хайв также отличаются друг от друга. Об этом мы расскажем в следующей статье.

Как настроить и эффективно запустить аналитику больших данных с помощью этих SQL-инструментов вы узнаете на наших практических курсах в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов (менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data) в Москве:

Источники

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *