Hive что это за программа
Перейти к содержимому

Hive что это за программа

  • автор:

Что такое 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 уже сегодня.

Обзор Apache Hive и HiveQL в Azure HDInsight

Apache Hive — это система хранилища данных для Apache Hadoop. Hive позволяет обобщать, запрашивать и анализировать данные. Запросы Hive создаются на языке запросов HiveQL, который похож на SQL.

Hive позволяет создавать структуру для преимущественно неструктурированных данных. После определения структуры вы можете использовать HiveQL для запроса этих данных без знания Java или MapReduce.

HDInsight предоставляет несколько типов кластера, которые подходят для конкретных рабочих нагрузок. Для запросов Hive наиболее часто используются следующие типы кластеров:

Тип кластера Description
Интерактивный запрос Кластер Hadoop, который обеспечивает функцию аналитической обработки с низкой задержкой (LLAP) для оптимизации времени ответа для интерактивных запросов. Дополнительные сведения см. в статье Использование Interactive Hive с HDInsight (предварительная версия).
Hadoop Кластер Hadoop, который предназначен для рабочих нагрузок пакетной обработки. Дополнительные сведения см. в статье Приступая к работе с Apache Hadoop в HDInsight.
Spark Apache Spark содержит встроенные функциональные возможности для работы с Hive. Дополнительные сведения см. в статье Приступая к работе с Apache Spark в HDInsight.
HBase HiveQL может использоваться для создания запросов данных, хранимых в Apache HBase. Дополнительные сведения см. в статье Приступая к работе с Apache HBase в HDInsight.

Как использовать Hive

В следующей таблице показаны различные способы использования Hive в HDInsight:

Используйте этот метод, если требуется: . интерактивные запросы . пакетная обработка . из этого кластера операционной системы
Средства HDInsight для Visual Studio Code Linux, Unix, macOS X или Windows
Средства HDInsight для Visual Studio Windows
Представление Hive Для приложений на основе браузера
клиент Beeline Linux, Unix, macOS X или Windows
REST API Linux, Unix, macOS X или Windows
Windows PowerShell Windows

Справочник по языку HiveQL

Справочник по языку HiveQL доступен на странице руководства по языку.

Hive и структура данных

Hive поддерживает работу со структурированными и частично структурированными данными. Например, с текстовыми файлами, в которых поля разделяются с помощью определенных знаков. С помощью следующей инструкции HiveQL создается таблица для данных, разделенных пробелами:

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/'; 

Hive также поддерживает пользовательские сериализаторы/десериализаторы (SerDe) для сложных или беспорядочно структурированных данных. Дополнительные сведения см. в документе How to use a custom JSON SerDe with HDInsight (Как использовать настраиваемую сериализацию-десериализациюJSON с HDInsight).

Сравнение внутренних и внешних таблиц Hive

Существует два типа таблиц, которые вы можете создать с помощью Hive:

  • Внутренняя: данные хранятся в хранилище данных Hive. Хранилище данных расположено в /hive/warehouse/ , в хранилище по умолчанию для кластера. Используйте внутренние таблицы, если применяется одно из следующих условий:
    • данные являются временными;
    • вы хотите использовать Hive для управления жизненным циклом таблицы и данных.
    • данные также используются за пределами Hive (например, файлы данных обновляются с помощью другого процесса, который не блокирует их);
    • данные должны оставаться в базовом расположении даже после удаления таблицы;
    • вам нужно пользовательское расположение, например нестандартная учетная запись хранилища;
    • программа, отличная от Hive, управляет форматом данных, расположением и т. д.

    Дополнительные сведения см. в записи блога HDInsight: Hive Internal and External Tables Intro (HDInsight: введение во внутренние и внешние таблицы Hive).

    Определяемые пользователем функции (UDF)

    Инфраструктура Hive также может быть расширена с помощью определяемых пользователем функций (UDF). UDF позволяет реализовать функции или логику, сложно моделируемые в HiveQL. Примеры использования определяемых пользователем функций с Hive приведены в следующих документах:

    • Работа с определяемыми пользователем функциями Java с использованием Apache Hive в HDInsight
    • Работа с определяемыми пользователем функциями Python с использованием Apache Hive в HDInsight
    • Работа с определяемыми пользователем функциями C# с использованием Apache Hive в HDInsight
    • Как добавить настраиваемые определяемые пользователем функции Apache Hive в HDInsight
    • Пример определяемой пользователем функции Apache Hive для преобразования форматов даты и времени в метки времени Hive

    Демонстрационные данные

    Hive в HDInsight поставляется предварительно загруженным с внутренней таблицей hivesampletable . HDInsight также предоставляет пример наборов данных, которые могут использоваться с Hive. Эти наборы данных хранятся в каталогах /example/data и /HdiSamples . Эти каталоги находятся в хранилище по умолчанию для кластера.

    Пример запроса Hive

    Приведенная ниже инструкция HiveQL проецирует столбцы проекта в файл /example/data/sample.log .

    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; 

    В предыдущем примере операторы HiveQL выполняют следующие действия.

    Оператор Description
    DROP TABLE Если таблица уже существует, удалите ее.
    CREATE EXTERNAL TABLE Создает внешнюю таблицу в Hive. Внешние таблицы хранят только определения таблицы в Hive. Данные остаются в исходном расположении и формате.
    ROW FORMAT инструкции по форматированию данных для Hive. В данном случае поля всех журналов разделены пробелом.
    STORED AS TEXTFILE LOCATION Указывает Hive расположение хранения данных (каталог example/data ) и их формат (текст). Данные могут храниться в одном файле или быть распределенными по нескольким файлам в каталоге.
    SELECT Подсчитывает количество всех строк, в которых столбец t4 содержит значение [ERROR]. Эта инструкция должна вернуть значение 3, так как данное значение содержат три строки.
    INPUT__FILE__NAME LIKE ‘%.log’ Hive пытается применить схему ко всем файлам в каталоге. В этом случае каталог содержит файлы, которые не соответствуют схеме. Чтобы исключить лишние данные в результатах, эта инструкция указывает Hive возвращать данные только из файлов, заканчивающихся на .log.

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

    Удаление внешней таблицы не приводит к удалению данных; будет удалено только описание таблицы.

    Для создания внутренней таблицы вместо внешней используйте следующий запрос 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]'; 

    Эти операторы выполняют следующие действия:

    Оператор Description
    CREATE TABLE IF NOT EXISTS Создает таблицу, если она не существует. Так как ключевое слово EXTERNAL не используется, этот оператор создает внутреннюю таблицу. Таблица хранится в хранилище данных Hive и полностью управляется Hive.
    STORED AS ORC Позволяет сохранить данные в формате ORC. Это высокооптимизированный и эффективный формат для хранения данных Hive.
    INSERT OVERWRITE . SELECT Выбирает строки из log4jLogs таблицы, содержащей [ERROR], а затем вставляет данные в таблицу errorLogs .

    В отличие от внешних таблиц, удаление внутренней таблицы приводит к удалению базовых данных.

    Improve Hive query performance (Повышение производительности запросов Hive)

    Apache Tez

    Apache Tez — это платформа, которая позволяет повысить производительность приложений, обрабатывающих большие объемы данных (включая Hive). Tez включена по умолчанию. Раздел Документация по работе Apache Hive на Tez содержит дополнительные сведения о реализации этого решения и вариантах настроек.

    Аналитическая обработка с низкой задержкой (LLAP)

    LLAP (иногда называемая Live Long and Process) — это новая функция в Hive 2.0, которая разрешает кэширование запросов в памяти.

    HDInsight предоставляет LLAP в кластере интерактивных запросов. Дополнительные сведения см. в статье Использование Interactive Hive с HDInsight (предварительная версия).

    Scheduling Hive queries (Планирование запросов Hive)

    Есть несколько служб, которые поддерживают запросы Hive в рамках рабочего процесса по расписанию или по требованию.

    Azure Data Factory

    Фабрика данных Azure позволяет использовать HDInsight как часть конвейера фабрики данных. Дополнительные сведения об использовании Hive из конвейера см. в документе Преобразование данных с помощью действия Hadoop Hive в фабрике данных Azure.

    Задания Pig и SQL Server Integration Services

    С помощью служб SQL Server Integration Services (SSIS) можно выполнить задание Hive. Пакет дополнительных компонентов Azure для служб SSIS предоставляет следующие компоненты, которые работают с заданиями Hive в HDInsight.

    • Задача Hive в Azure HDInsight
    • Диспетчер подключений подписки Azure

    Дополнительные сведения см. в документации по пакету функций Azure.

    Apache Oozie

    Apache Oozie — это система рабочих процессов и координации, управляющая заданиями Hadoop. Дополнительные сведения см. в статье об использовании Apache Oozie с Hive для определения и запуска рабочего процесса.

    Следующие шаги

    Теперь, когда вы знаете, что такое инфраструктура Hive и как ее использовать с Hadoop в HDInsight, воспользуйтесь следующими ссылками, чтобы изучить другие способы работы с Azure HDInsight.

    • Отправка данных в HDInsight
    • Использование определяемых пользователем функций Python с Apache Hive и Apache Pig в HDInsight
    • Использование заданий MapReduce с HDInsight

    Краткое введение в улей Apache и свинью

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

    Hive включает запрос HiveQL в программу Java MapReduce и затем отправляет его в кластер Hadoop. Тот же результат может быть достигнут с использованием HiveQL и Java MapReduce, но использование Java MapReduce потребует написания / отладки большого количества кода по сравнению с HiveQL. Таким образом, HiveQL увеличивает производительность разработчика.

    Подводя итог, можно сказать, что Hive через язык HiveQL предоставляет абстракцию более высокого уровня по сравнению с Java MapReduce. Как и в случае любой другой высокоуровневой абстракции, при использовании HiveQL наблюдается небольшое снижение производительности по сравнению с Java MapReduce, но сообщество Hive работает над тем, чтобы сократить этот разрыв для большинства наиболее часто используемых сценариев.

    В том же ключе, Pig обеспечивает более высокий уровень абстракции по сравнению с MapReduce. Pig поддерживает конструкции PigLatin, которые преобразуются в программу Java MapReduce и затем передаются в кластер Hadoop.

    Хотя HiveQL является декларативным языком, таким как SQL, PigLatin является языком потока данных. Вывод одной конструкции PigLatin может быть отправлен как ввод в другую конструкцию PigLatin и так далее.

    Некоторое время назад Cloudera опубликовал статистику о характере рабочей нагрузки в типичном кластере Hadoop, и можно легко заметить, что задания Pig и Hive составляют значительную часть заданий в кластере Hadoop. Из-за более высокой производительности труда разработчиков многие компании выбирают абстрактные тезисы, такие как Pig и Hive. Таким образом, мы можем поспорить, что вокруг Hive и Pig будет много вакансий по сравнению с разработкой MapReduce.

    Хотя книга Programming Pig была опубликована в октябре 2011 года, книга Programming Hive была опубликована совсем недавно, в октябре 2012 года. Для тех, кто имеет опыт работы с RDBMS, лучше начать работу с Hive, чем начинать работу с Pig. Также обратите внимание, что язык PigLatin не очень сложен для начала.

    Для базового кластера Hadoop прозрачно, передано ли задание Java MapReduce или задание MapReduce через Hive и Pig. Из-за пакетного характера заданий MapReduce задания, представленные через Hive и Pig, также имеют пакетный характер.

    Что касается требований к ответам в реальном времени, Hive и Pig не отвечают требованиям из-за ранее упомянутой пакетно-ориентированной природы заданий MapReduce. Cloudera разработала Impala, основанную на Dremel (публикация от Google) для интерактивных специальных запросов поверх Hadoop. Impala поддерживает SQL-подобные запросы и совместима с HiveQL. Поэтому любые приложения, созданные на основе Hive, должны работать с минимальными изменениями в Impala. Основное различие между Hive и Impala заключается в том, что, хотя HiveQL преобразуется в задания Java MapReduce, Impala не преобразует SQL-запрос в задания Java MapReduce.

    Вы должны пойти с Свинья или Улей для конкретного требования? Это тема для другого блога.

    Переиздано с разрешения Правина Срипати. Оригинальную статью можно найти здесь: http://www.thecloudavenue.com/2012/12/introduction-to-apache-hive-and-pig.html

    Краткое введение в улей Apache и свинью

    Введение в модель OSI

    Введение в модель OSI

    Вместо того, чтобы служить протоколом, модель OSI стала инструментом обучения, который показывает, как должны решаться различные задачи в сети.

    Что такое 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 не будет опубликован. Обязательные поля помечены *