Обзор 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, см. в руководстве по языку (https://cwiki.apache.org/confluence/display/Hive/LanguageManual).

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

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

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

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

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

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

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

Дополнительные сведения см. в записи блога HDInsight: Hive Internal and External Tables Intro (HDInsight: введение во внутренние и внешние таблицы 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 выполняют следующие действия.

Оператор 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.

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

Apache Oozie

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

Примечание.

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

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

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