Рекомендации по настройке производительности для MapReduce в HDInsight и Azure Data Lake Storage 1-го поколения
Предварительные требования
- Подписка Azure. См. страницу бесплатной пробной версии Azure.
- Учетная запись Azure Data Lake Storage 1-го поколения. За инструкциями по созданию учетной записи обращайтесь к статье Начало работы с Azure Data Lake Storage 1-го поколения.
- Кластер Azure HDInsight с доступом к учетной записи Data Lake Storage 1-го поколения. Дополнительные сведения см. в статье Создание кластеров HDInsight, использующих Data Lake Store, с помощью портала Azure. Убедитесь, что вы включили удаленный рабочий стол для кластера.
- Использование MapReduce в HDInsight. См. дополнительные сведения об использовании MapReduce в Hadoop и HDInsight
- Ознакомьтесь с рекомендациями по настройке производительности в Data Lake Storage 1-го поколения. Общие вопросы производительности описаны в рекомендациях по настройке производительности 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-го поколения определяет ограничения пропускной способности на уровне учетной записи. При превышении этих ограничений происходит сбой задач. Это можно определить, отслеживая ошибки регулирования в журналах задач. Если для обработки задания требуется большая пропускная способность, свяжитесь с нами.
Чтобы проверить, применяется ли для вас регулирование, включите ведение журнала отладки на стороне клиента. Вот как это сделать.
Поместите следующее свойство в свойства log4j в конфигурации Ambari > YARN >> Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG
Перезапустите все узлы и службы, чтобы изменения конфигурации вступили в силу.
Если выполняется регулирование, вы увидите код ошибки 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