Рекомендации по настройке производительности для Hive в HDInsight и Azure Data Lake Storage 1-го поколения

По умолчанию устанавливаются параметры, которые должны обеспечить оптимальную производительность для самых разных сценариев использования. Но для запросов, предполагающих интенсивное выполнение операций ввода-вывода, производительность Hive в Azure Data Lake Storage 1-го поколения можно повысить, изменив некоторые настройки.

Предварительные требования

Параметры

Ниже приведены наиболее важные параметры, которые помогут повысить производительность Azure Data Lake Storage 1-го поколения:

  • hive.tez.container.size — объем памяти, используемой для каждой задачи;

  • tez.grouping.min-size — минимальный размер каждого модуля сопоставления;

  • tez.grouping.max-size — максимальный размер каждого модуля сопоставления;

  • hive.exec.reducer.bytes.per.reducer — размер каждого модуля уменьшения.

hive.tez.container.size — размер контейнера, который определяет объем доступной памяти для каждого задания. Это главный параметр для управления параллелизмом в Hive.

tez.grouping.min-size — этот параметр позволяет задать минимальный размер каждого модуля сопоставления. Если число модулей сопоставления, которые выбирает Tez, окажется меньше, чем значение этого параметра, Tez будет использовать заданное здесь значение.

tez.grouping.max-size — этот параметр позволяет задать максимальный размер каждого модуля сопоставления. Если число модулей сопоставления, которые выбирает Tez, окажется больше, чем значение этого параметра, Tez будет использовать заданное здесь значение.

hive.exec.reducer.bytes.per.reducer — этот параметр задает размер каждого модуля уменьшения. По умолчанию используется размер 256 МБ.

Руководство

Задайте hive.exec.reducer.bytes.per.reducer — значение по умолчанию хорошо работает для несжатых данных. Если используются сжатые данные, попробуйте сократить размер модуля уменьшения редукции.

Задайте hive.tez.container.size — объем памяти для каждого узла, который определяется параметром yarn.nodemanager.resource.memory-mb (должен быть правильно определен для кластера HDI по умолчанию). Дополнительные сведения о настройке памяти в YARN см. в этой записи блога.

Для интенсивных нагрузок ввода-вывода будет полезным увеличить параллелизм, снижая размер контейнера Tez. Это предоставит пользователю дополнительные контейнеры, то есть увеличит параллелизм. Но некоторые запросы Hive требуют значительного объема памяти (например, MapJoin). Если задача не получит достаточного объема памяти, во время выполнения возникнет соответствующее исключение. Если вы заметите такие исключения, увеличьте объем памяти.

Число одновременно выполняемых задач для параллелизма ограничивается общим объемом памяти YARN. Число контейнеров YARN определяет, сколько параллельных задач можно запустить. Чтобы узнать, сколько памяти YARN доступно для каждого узла, зайдите в Ambari. Перейдите к YARN и откройте вкладку Конфигурации. В этом окне отображается память YARN.

Общий объем памяти YARN = число узлов × объем памяти YARN на узел. Количество контейнеров YARN = общий объем памяти YARN / размер контейнера Tez

При использовании Azure Data Lake Storage 1-го поколения повышение производительности достигается за счет максимально возможного уровня параллелизма. Tez автоматически вычисляет число задач, которые нужно создать, поэтому нет необходимости настраивать этот параметр.

Пример вычисления

Предположим, что у вас есть кластер D14 с 8 узлами.

Общий объем памяти YARN = число узлов × объем памяти YARN на узел. Общий объем памяти YARN = 8 узлов × 96 ГБ = 768 ГБ. Количество контейнеров YARN = 768 ГБ / 3072 МБ = 256.

Ограничения

Регулирование Data Lake Storage 1-го поколения

Если вы достигнете пределов пропускной способности, предоставленной Data Lake Storage 1-го поколения, вы увидите сбои задач. Это можно заметить, отслеживая ошибки регулирования в журналах задач. Можно уменьшить параллелизм, увеличив размер контейнера Tez. Если для обработки задания требуется больший параллелизм, свяжитесь с нами.

Чтобы проверить, применяется ли для вас регулирование, включите ведение журнала отладки на стороне клиента. Вот как это сделать.

  1. Поместите следующее свойство в окно свойств log4j в файле конфигурации Hive. Это можно сделать из представления Ambari: log4j.logger.com.microsoft.azure.datalake.store=DEBUG. Перезагрузите все узлы или службу, чтобы изменения конфигурации вступили в силу.

  2. Если регулирование выполняется, вы увидите код ошибки HTTP 429 в файле журнала Hive. Файл журнала находится в каталоге /tmp/<имя_пользователя>/hive.log

Дополнительные сведения о настройке Hive

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