Настройка сортировки в MapReduce

Hadoop позволяет настроить использование кастомных реализаций методов сортировки (sort) и перемешивания (shuffle) в MapReduce.

Это позволяет, например, использовать протокол RDMA вместо HTTP для перемешивания данных или использовать другие алгоритмы сортировки, которые позволяют агрегировать хеш и выполнять запросы Limit-N.

Дополнительную информацию о MapReduce можно получить в статьях Обзор работы MapReduce и Архитектура MapReduce.

ВНИМАНИЕ

Возможность использования кастомных решений для перемешивания и сортировки — экспериментальная и нестабильная. Это значит, что предоставляемые API могут измениться и нарушить совместимость в будущих версиях Hadoop.

Перемешивание выполняется сервисами NodeManager Auxiliary service и shuffle consumer plugin.

Чтобы заменить auxiliary service по умолчанию, необходимо отредактировать свойства конфигурации NodeManager, перечисленные в таблице ниже.

Параметры NodeManager Auxiliary service
Параметр Описание Значение по умолчанию

yarn.nodemanager.aux-services

Название нового auxiliary service

…​,mapreduce_shuffle

yarn.nodemanager.aux-services.mapreduce_shuffle.class

Имя класса auxiliary service

org.apache.hadoop.mapred.ShuffleHandler

yarn.nodemanager.aux-services.<имя_класса>.classpath

Путь к локальной директории с JAR-файлами auxiliary service и его зависимостей. Путь может вести к конкретному JAR-файлу, использовать паттерн {local_dir_to_jar}/* для загрузки всех JAR-файлов из директории или содержать несколько значений, разделенных :

 — 

yarn.nodemanager.aux-services.<имя_класса>.remote-classpath

Параметр, который следует использовать вместо yarn.nodemanager.aux-services.%s.classpath, если файлы JAR расположены в удаленной файловой системе

 — 

Чтобы отредактировать эти параметры на всех хостах с помощью ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите в Services и нажмите на YARN.

  3. Включите параметр Show Advanced и найдите yarn-site.xml.

  4. Откройте раскрывающийся список параметров, выберите yarn.nodemanager.aux-services и добавьте новый параметр.

  5. Выберите yarn.nodemanager.aux-services.mapreduce_shuffle.class и введите новое значение.

  6. Найдите параметр Custom yarn-site.xml, выберите Add property и введите имя нового параметра в зависимости от расположения JAR-файлов auxiliary service: yarn.nodemanager.aux-services.<имя_класса>.classpath или yarn.nodemanager.aux-services.<имя_класса>.remote-classpath.

  7. Подтвердите изменения в конфигурации YARN, нажав Save.

  8. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

Чтобы заменить shuffle consumer plugin по умолчанию, установите новое значение параметра mapreduce.job.reduce.shuffle.consumer.plugin.class.

Если новое значение задано в переменной окружения на одном хосте, настройки shuffle consumer plugin изменятся для отдельной задачи MapReduce (job). Чтобы использовать один shuffle consumer plugin для всех задач, отредактируйте значение этого параметра в файле конфигурации mapred-site.xml с помощью ADCM.

ПРИМЕЧАНИЕ

Если использовать кастомные auxiliary service и shuffle consumer plugin, необходимо добавить новый сервисный ключ в параметр yarn.nodemanager.aux-services.<…​>. Например, для сервиса с названием mapred.shufflex необходимо добавить параметр yarn.nodemanager.aux-services.mapreduce_shufflex.class.

Чтобы изменить метод сортировки по умолчанию, установите новое значение для свойства mapreduce.job.map.output.collector.class коллектора вывода (output collector).

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

Если новое значение задано в переменной окружения на одном хосте, настройки коллектора изменятся для отдельной задачи MapReduce (job). Чтобы использовать новый коллектор вывода для всех задач, отредактируйте значение этого параметра в файле конфигурации mapred-site.xml с помощью ADCM.

Чтобы отредактировать mapred-site.xml на всех хостах через ADCM:

  1. На странице Clusters выберите нужный кластер.

  2. Перейдите в Services и нажмите на YARN.

  3. Включите параметр Show Advanced и найдите Custom mapred-site.xml.

  4. Откройте раскрывающийся список параметров и выберите Add property.

  5. Введите имя параметра и желаемое значение.

  6. Подтвердите изменения в конфигурации YARN, нажав Save.

  7. В раскрывающемся меню Actions выберите Restart, убедитесь, что для параметра Apply configs from ADCM установлено значение true, и нажмите Run.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней