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

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

Параметры

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

Параметр Описание
Mapreduce.map.memory.mb Объем памяти, выделяемой для каждого сопоставителя.
Mapreduce.job.maps Число задач сопоставления на задание.
Mapreduce.reduce.memory.mb Объем памяти, выделяемой для каждого редуктора.
Mapreduce.job.reduces Число задач уменьшения на задание.

Mapreduce.map.memory/Mapreduce.reduce.memory

Это число настраивается в зависимости от объема памяти, требуемой для задачи сопоставления или уменьшения. Вы можете просмотреть значения по умолчанию mapreduce.map.memory и mapreduce.reduce.memory в Ambari с помощью конфигурации Yarn. В интерфейсе Ambari перейдите к YARN и откройте вкладку конфигураций, где отобразится объем памяти YARN.

Mapreduce.job.maps/Mapreduce.job.reduces

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

Руководство

Шаг 1. Определение числа запущенных заданий

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

Шаг 2. Настройка mapreduce.map.memory/mapreduce.reduce.memory

Объем памяти для задач сопоставления и уменьшения будет зависеть от конкретного задания. Можно уменьшить объем памяти, если нужно повысить параллелизм. Число одновременно выполняемых задач зависит от числа контейнеров. Сокращая объем памяти для каждого модуля сопоставления или уменьшения, можно создавать дополнительные контейнеры, обеспечивая одновременный запуск большего числа модулей сопоставления или уменьшения. Слишком сильное снижение объема памяти может вызвать нехватку памяти при выполнении некоторых процессов. Если при выполнении задания возникает ошибка кучи, следует увеличить объем памяти на сопоставитель или редуктор. При этом следует учитывать следующее: добавление нескольких контейнеров ведет к увеличению нагрузки для каждого дополнительного контейнера, из-за которой может снизиться производительность. Альтернатива — обеспечить больший объем памяти, используя кластер с большим объемом памяти или увеличивая число узлов в кластере. Больший объем памяти позволит использовать дополнительные контейнеры, обеспечивая возможность параллельной обработки.

Шаг 3. Определение общей памяти YARN

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

Total YARN memory = nodes * YARN memory per node

Если используется пустой кластер, это значение может быть представлено общим объемом памяти YARN для кластера. Если другие приложения используют память, вы можете ограничить выделение памяти кластера, сократив число модулей сопоставления или уменьшения в соответствии с числом контейнеров, которые вы хотите использовать.

Шаг 4. Расчет числа контейнеров YARN

Контейнеры YARN определяют уровень параллелизма для задания. Разделите общий объем памяти YARN на значение mapreduce.map.memory.

# of YARN containers = total YARN memory / mapreduce.map.memory

Шаг 5. Установка mapreduce.job.maps/mapreduce.job.reduces

Установите для mapreduce.job.maps/mapreduce.job.reduces по крайней мере число доступных контейнеров. Вы можете поэкспериментировать, увеличивая число модулей сопоставления и уменьшения, чтобы понять, помогает ли это оптимизировать производительность. Имейте в виду, что большое число модулей сопоставления может увеличить нагрузку, что, в свою очередь, может привести к снижению производительности.

Возможности изоляции и планирования использования ресурсов ЦП отключены по умолчанию, следовательно, число контейнеров YARN ограничено объемом памяти.

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

Предположим, у вас есть кластер, который состоит из 8 узлов D14 и вы хотите запустить задание с большим количеством операций ввода-вывода. Ниже представлены примеры вычислений, которые нужно выполнить.

Шаг 1. Определение числа запущенных заданий

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

Шаг 2. Настройка mapreduce.map.memory/mapreduce.reduce.memory

В нашем примере выполняется задание с большим объемом операций ввода-вывода. Следовательно, 3 ГБ памяти, выделенных для задач сопоставления, будет достаточно.

mapreduce.map.memory = 3GB

Шаг 3. Определение общей памяти YARN

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

Шаг 4. Расчет числа контейнеров YARN

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

Шаг 5. Установка mapreduce.job.maps/mapreduce.job.reduces

mapreduce.map.jobs = 256

Ограничения

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

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

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

  1. Поместите следующее свойство в свойства log4j в конфигурации Ambari > YARN >> Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. Перезапустите все узлы и службы, чтобы изменения конфигурации вступили в силу.

  3. Если выполняется регулирование, вы увидите код ошибки HTTP 429 в файле журнала YARN. Файл журнала YARN расположен здесь: /tmp/<пользователь>/yarn.log

Примеры выполнения кода

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

  • 16 узлов D14v2;
  • кластер Hadoop под управлением HDI 3.6.

Для начала ознакомьтесь с примерами команд для запуска MapReduce Teragen, Terasort и Teravalidate. Эти команды можно настроить в соответствии с имеющимися ресурсами.

Teragen

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input

Terasort

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output

Teravalidate

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate