Когда в MapReduce вызывается Exactly Combiner?

Объединители сделаны с использованием того же класса, что и редюсер, и в основном с тем же кодом. Но вопрос, когда именно он вызывается перед сортировкой и перемешиванием или перед сокращением? Если перед сортировкой и перемешиванием i. е., сразу после маппера, то как он будет получать ввод как [key, list<values>]? так как это дается сортировкой и перемешиванием. Теперь, если он вызывается после сортировки и перемешивания i. е., непосредственно перед редуктором, а затем выходом на объединитель является [key, value], как редуктор, тогда как редуктор получит ввод как [key, list<values>]?


person Abhi    schedule 07.07.2015    source источник
comment
Возможный дубликат На каком основании Платформа mapreduce решает, запускать комбайнер или нет   -  person Andrea    schedule 08.03.2017


Ответы (4)


Типы вывода объединителя должны соответствовать типам вывода преобразователя. Hadoop не дает никаких гарантий относительно того, сколько раз применяется объединитель или даже применяется ли он вообще.

Если ваш преобразователь расширяет Mapper< K1, V1, K2, V2 >, а редьюсер расширяет
Reducer< K2, V2, K3, V3 >, то объединитель должен быть расширением
Reducer< K2, V2, K2, V2 >.

Combiner применяется на том же компьютере, что и операция map. Обязательно перед перетасовкой.

Как указано в документации Hadoop:

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

http://wiki.apache.org/hadoop/HadoopMapReduce

person vanekjar    schedule 07.07.2015
comment
Если он запускается перед перемешиванием, это означает, что он получает входные данные от преобразователя, но ввод для объединителя — это ключ, список‹значений›, и этот тип вывода исходит от фазы сортировки и перемешивания, а затем от того, как он может работать перед сортировкой и перемешиванием. - person Abhi; 10.07.2015
comment
Я немного уточнил свой ответ. Пожалуйста, посмотрите. - person vanekjar; 10.07.2015

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

Он будет применяться на том же хосте, на котором обрабатывается этап сопоставления, сводя к минимуму передачу данных по сети для следующего этапа обработки (сортировка-перетасовка и уменьшение).

Из-за этой оптимизации использования объединителя фактическая фаза редуктора будет иметь меньшую нагрузку на обработку, что приведет к повышению производительности.

person Shivaprasad    schedule 07.07.2015
comment
Да, это правильная функциональность объединителя, но мой вопрос в том, где именно она вызывается в конвейере картографа, s&s и редуктора. - person Abhi; 10.07.2015
comment
На самом деле, после фазы карты и перед сортировкой и перемешиванием. После фазы сопоставления выходные данные будут переданы для следующей фазы сортировки и перемешивания, а Combiner действует перед этой фазой сортировки и перемешивания. Это похоже на Map-›Combiner-›Sort n Shuffle-›Reducer - person Shivaprasad; 10.07.2015

На самом деле, после фазы карты и перед сортировкой и перемешиванием. После фазы сопоставления выходные данные будут переданы для следующей фазы сортировки и перемешивания, а Combiner действует перед этой фазой сортировки и перемешивания. Это как Карта-> Комбинатор-> Сортировка и перемешивание -> Редуктор.

person Shivaprasad    schedule 06.10.2016
comment
Извините, я так не думаю, я думаю, что порядок такой: карта->буфер в памяти->раздел->сортировка->объединитель->слить на диск->уменьшить - person StrongYoung; 14.01.2018

Инфраструктура Map Reduce не будет постоянно вызывать комбинатор, даже если вы напишете пользовательский комбинатор. он обязательно вызовет объединитель, если количество разливов не менее 3 (по умолчанию). Вы можете настроить количество разливов, для которых необходимо запустить объединитель, можно установить с помощью свойства min.num.splits.for.combine.

person steve brad    schedule 10.06.2016