Поделиться через


Что такое Apache Hive и HiveQL в Azure HDInsight?

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

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

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

Тип кластера Описание
Интерактивный запрос Кластер Hadoop, предоставляющий функции низкой задержки аналитической обработки (LLAP) для улучшения времени отклика для интерактивных запросов. Дополнительные сведения см. в разделе "Начало с интерактивным запросом" в документе HDInsight .
Hadoop Кластер Hadoop, настроенный для рабочих нагрузок пакетной обработки. Дополнительные сведения см. в статье "Начало работы с Apache Hadoop" в документе HDInsight .
Спарк 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 Виндоус
Hive View Любой (на основе браузера)
Клиент Beeline Linux, Unix, macOS X или Windows
REST API   Linux, Unix, macOS X или Windows
Windows PowerShell   Виндоус

Справочник по языку 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) для сложных или нерегулярных структурированных данных. Дополнительные сведения см. в документе Как использовать пользовательский JSON SerDe с HDInsight.

Дополнительные сведения о форматах файлов, поддерживаемых Hive, см. в руководстве по языку (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Внутренние таблицы Hive и внешние таблицы

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

  • Внутренний: данные хранятся в хранилище данных Hive. Хранилище данных находится на основном хранилище по умолчанию для кластера в /hive/warehouse/.

    Используйте внутренние таблицы, если применяется одно из следующих условий:

    • Данные являются временными.
    • Вы хотите, чтобы Hive управлял жизненным циклом таблицы и данных.
  • Внешний: данные хранятся за пределами хранилища данных. Данные можно хранить в любом хранилище, доступном кластером.

    Используйте внешние таблицы, если применяется одно из следующих условий:

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

Для получения более подробной информации см. запись блога Введение во внутренние и внешние таблицы Hive.

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

Hive также можно расширить с помощью определяемых пользователем функций (UDF). UDF позволяет реализовать функциональные возможности или логику, которые не легко моделироваются в HiveQL. Пример использования пользовательских функций с 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 выполняют следующие действия:

Заявление Описание
УДАЛИТЬ ТАБЛИЦУ Если таблица уже существует, удалите ее.
СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ Создает внешнюю таблицу в Hive. Внешние таблицы хранят только определения таблицы в Hive. Данные остаются в исходном расположении и в исходном формате.
Формат строки Сообщает Hive о форматировании данных. В данном случае поля всех журналов разделены пробелом.
СОХРАНЕНО В ВИДЕ ФАЙЛА ТЕКСТОВОЕ РАСПОЛОЖЕНИЕ Сообщает Hive, где хранятся данные ( example/data каталог) и хранятся в виде текста. Данные могут находиться в одном файле или распространяться по нескольким файлам в каталоге.
ВЫБЕРИТЕ Выбирает количество всех строк, в которых столбец 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]';

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

Заявление Описание
СОЗДАНИЕ ТАБЛИЦЫ, ЕСЛИ ОНА НЕ СУЩЕСТВУЕТ Если таблица не существует, создайте ее. Так как ключевое слово EXTERNAL не используется, эта инструкция создает внутреннюю таблицу. Таблица хранится в хранилище данных Hive и полностью управляется Hive.
Хранится как ORC Сохраняет данные в формате оптимизированного столбца строк (ORC). Формат ORC является высоко оптимизированным и эффективным для хранения данных в Hive.
INSERT OVERWRITE ... ВЫБИРАТЬ Выбирает строки из log4jLogs таблицы, содержащей [ERROR], а затем вставляет данные в таблицу errorLogs .

Примечание.

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

Повышение производительности запросов Hive

Apache Tez

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

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

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

HDInsight предоставляет LLAP в типе кластера интерактивных запросов. Дополнительные сведения см. в документе "Начало с интерактивным запросом ".

Планирование запросов Hive

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

Фабрика данных Azure

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

Задания Hive и службы SQL Server Integration Services

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

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

Apache Oozie

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

Примечание.

Обработчик хранилища Phoenix для Hive не поддерживается в HDInsight

Дальнейшие действия

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