Когда в Hadoop запускаются задачи сокращения?


82

Когда в Hadoop запускаются задачи сокращения? Начинаются ли они после завершения определенного процента (порога) картографов? Если да, установлен ли этот порог? Какой порог обычно используется?

Ответы:


206

Фаза сокращения состоит из 3 шагов: перемешивание, сортировка, уменьшение. В случайном порядке данные собираются редуктором от каждого сопоставителя. Это может произойти, пока картографы генерируют данные, поскольку это всего лишь передача данных. С другой стороны, сортировка и сокращение могут начаться только после того, как все сопоставления будут выполнены. Вы можете определить, что делает MapReduce, посмотрев на процент завершения редуктора: 0-33% означает, что он выполняет перемешивание, 34-66% - сортировка, 67% -100% - сокращение. Вот почему ваши редюсеры иногда кажутся "застрявшими" на 33% - они ждут завершения работы мапперов.

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

Почему ранний запуск редукторов - это хорошо? Потому что он распределяет передачу данных от картографов к редукторам с течением времени, что хорошо, если ваша сеть является узким местом.

Почему ранний запуск редукторов - это плохо? Потому что они сокращают количество слотов, копируя только данные и ожидая завершения работы мапперов. Другая работа, которая начинается позже и фактически использует слоты уменьшения, теперь не может их использовать.

Вы можете настроить запуск редукторов, изменив значение по умолчанию mapred.reduce.slowstart.completed.mapsin mapred-site.xml. Значение 1.00будет ждать завершения всех преобразователей перед запуском редукторов. Значение сразу 0.0запустит редукторы. Значение 0.5запустит редукторы, когда половина картографов будет завершена. Вы также можете вносить изменения mapred.reduce.slowstart.completed.mapsдля каждой работы. В новых версиях Hadoop (не ниже 2.4.1) параметр называется ismapreduce.job.reduce.slowstart.completedmaps (спасибо пользователю yegor256).

Как правило, я предпочитаю оставить mapred.reduce.slowstart.completed.mapsвыше, 0.9если в системе одновременно выполняется несколько заданий. Таким образом, работа не загружает редукторы, когда они ничего не делают, кроме копирования данных. Если вы выполняете только одно задание за раз, 0.1то, вероятно, будет уместно.


3
вы знаете, где я могу узнать больше о том, что вы упомянули?
daydreamer

1
На мой взгляд, Slowstart плохо документирован ... как и большинство непонятных параметров конфигурации.
Дональд Майнер,

5
Хороший ответ @Donald Miner. Просто хочу добавить, что в более новой версии Hadoop (я использую 1.1.2) значение по умолчанию равно 0,05. hadoop.apache.org/docs/r1.1.2/mapred-default.html
sufinawaz

@Donald Я использую версию hadoop 0.20.205.0 и устанавливаю параметр «mapred.reduce.slowstart.completed.maps» в mapred-site.xml равным 0,1, но редуктор по-прежнему работает после завершения сопоставления. Могу я узнать почему ?
Гарри Поттер

3
@nishm, я думаю, вы сбиваете с толку терминологию всей фазы сокращения по сравнению с просто сокращением внутри фазы сокращения. Фаза сокращения - это перемешивание, сортировка и уменьшение. Slowstart сообщает ему, когда начинать общую фазу. Вы правы, что сокращение внутри фазы сокращения начинается только после завершения картографирования.
Дональд Майнер,

5

Фаза сокращения может начаться задолго до вызова редуктора. Как только преобразователь завершает задание, сгенерированные данные подвергаются некоторой сортировке и перемешиванию (что включает вызов объединителя и разделителя). «Фаза» редуктора запускается в момент начала обработки данных пост-картографа. По завершении этой обработки вы увидите прогресс в процентах редукторов. Однако ни один из редукторов пока не вызван. В зависимости от количества доступных / используемых процессоров, характера данных и количества ожидаемых редукторов вы можете изменить параметр, как описано выше @ Donald-miner.


1

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


0

Процент, показанный для фазы сокращения, фактически соответствует количеству данных, скопированных из выходных данных карт во входные каталоги редукторов. Чтобы узнать, когда начинается это копирование? Это конфигурация, которую вы можете установить, как показал Дональд выше. После того, как все данные скопированы в редукторы (т.е. 100% -ное сокращение), редукторы начинают работать и, следовательно, могут зависнуть в «100% -ном сокращении», если ваш код редукторов требует большого количества операций ввода-вывода или ЦП.


0

Reduce запускается только после того, как все картографы выловили эту задачу, Reducer должен связаться со всеми картографами, поэтому он должен ждать, пока последний картограф завершит свою задачу. Однако mapper начинает передачу данных до момента, когда он завершил свою задачу.


-1

Рассмотрим пример WordCount, чтобы лучше понять, как работает задача уменьшения карты. Предположим, у нас есть большой файл, скажем, роман, и наша задача - найти, сколько раз каждое слово встречается в файле. Поскольку файл большой, он может быть разделен на разные блоки и реплицирован на разных рабочих узлах. Задание подсчета слов состоит из задач сопоставления и сокращения. Задача карты принимает в качестве входных данных каждый блок и создает промежуточную пару "ключ-значение". В этом примере, поскольку мы подсчитываем количество появлений слов, преобразователь при обработке блока приведет к промежуточным результатам формы (word1, count1), (word2, count2) и т. Д. Промежуточные результаты всех преобразователей прошел через фазу перемешивания, которая изменит порядок промежуточного результата.

Предположим, что выходные данные нашей карты от разных картографов имеют следующую форму:

Карта 1: - (is, 24) (was, 32) (and, 12)

Карта 2: - (my, 12) (is, 23) (was, 30)

Выходные данные карты сортируются таким образом, что одни и те же ключевые значения передаются одному и тому же редуктору. Здесь это будет означать, что ключи, соответствующие is, was и т. Д., Относятся к одному и тому же редуктору. Это редуктор, который производит окончательный результат, который в этом случае будет: - (и, 12) (is, 47) (my, 12 ) (было, 62)


Не отвечает на вопрос OP о том, КОГДА запускается редуктор.
Сай Кирити Бадам

-1

Редукторные задачи запускаются только после завершения completionработы всех картографов.

Но передача данных происходит после eachMap. На самом деле это операция вытягивания.

Это означает, что каждый раз reducer будет запрашивать каждую задачу map, есть ли у них какие-то данные для извлечения из Map. Если они обнаруживают, что какой-либо mapper выполнил свою задачу, Reducer извлекает промежуточные данные.

Промежуточные данные из Mapper хранятся в disk. А передача данных из Mapper в Reduce происходит через сеть ( Data Localityне сохраняется на этапе Reduce).


-2

Когда Mapper завершает свою задачу, Reducer начинает свою работу по сокращению данных, это задание Mapreduce.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.