8 ответов:
фаза уменьшения имеет 3 шага: перемешивание, сортировка, уменьшение. Shuffle-это место, где данные собираются редуктором от каждого картографа. Это может произойти, когда картографы генерируют данные, так как это только передача данных. С другой стороны, сортировка и сокращение могут начаться только после того, как все картографы будут выполнены. Вы можете сказать, какой из них MapReduce делает, глядя на процент завершения редуктора: 0-33% означает, что он делает перетасовку, 34-66% - сортировка, 67% -100% - сокращение. Вот почему ваши редукторы будут иногда кажется, что "застрял" на 33% - он ждет, когда картографы закончат.
редукторы начинают тасовать на основе порога процента картографов, которые закончили. Вы можете изменить параметр, чтобы получить редукторы, чтобы начать рано или поздно.
почему начало редукторов рано хорошая вещь? Потому что он распространяет передачу данных от картографов к редукторам с течением времени, что хорошо, если ваша сеть является узким местом.
почему начинает редукторы рано плохая вещь? Потому что они "засасывают" уменьшают слоты, только копируя данные и ожидая, когда картографы закончат. Другая работа, которая начинается позже, которая фактически будет использовать слоты сокращения, теперь не может их использовать.
вы можете настроить при запуске редукторов, изменив значение по умолчанию
mapred.reduce.slowstart.completed.mapsнаmapred-site.xml. Значение1.00будет ждать, пока все картографы закончат перед запуском редукторов. Значение0.0начнет редукторы сразу. Значение0.5начнет редукторы, когда половина картографов будет завершена. Вы также можете изменитьmapred.reduce.slowstart.completed.mapsна основе работы за работой. в новых версиях Hadoop (по крайней мере 2.4.1) параметр называетсяmapreduce.job.reduce.slowstart.completedmaps(спасибо пользователю yegor256).как правило, мне нравится держать
mapred.reduce.slowstart.completed.mapsвыше0.9если система имеет несколько рабочих мест, работающих одновременно. Таким образом, работа не засоряет редукторы, когда они ничего не делают, кроме копирования данных. Если у вас есть только одна работа, работающая на a время, делая0.1вероятно, было бы уместно.
фаза уменьшения может начаться задолго до вызова редуктора. Как только "а" отображатель заканчивает работу, то полученные данные подвергаются определенному сортировка и перетасовка (которая включает в себя призыв к комбайнера и утилиты). Редуктор "фаза"срабатывает в момент начала обработки данных post mapper. По мере выполнения этой обработки вы увидите прогресс в процентах редукторов. Однако ни один из редукторов еще не был вызван. В зависимости от количества доступных/используемых процессоров, характера данных и количество ожидаемых редукторов, вы можете изменить параметр, как описано @Donald-miner выше.
насколько я понимаю, уменьшите фазу начала с фазы карты и продолжайте потреблять запись с карт. Однако, поскольку существует фаза сортировки и перетасовки после фазы карты, все выходы должны быть отсортированы и отправлены в редуктор. Таким образом, логически вы можете себе представить, что фаза уменьшения начинается только после фазы карты, но на самом деле по причине производительности редукторы также инициализируются с помощью картографов.
процент, показанный для фазы уменьшения, фактически составляет объем данных, скопированных из выходных данных карт во входные каталоги редукторов. Чтобы узнать, когда начинается это копирование? Это конфигурация, которую вы можете установить, как Дональд показал выше. После того, как все данные копируются в редукторы (т. е. 100% reduce) именно тогда редукторы начинают работать и, следовательно, могут замерзнуть в "100% reduce", если ваш код редукторов является интенсивным вводом-выводом или процессором.
Рассмотрим пример WordCount, чтобы лучше понять, как работает задача map reduce.Предположим, у нас есть большой файл, скажем, роман и наша задача-найти, сколько раз каждое слово встречается в файле. Поскольку файл большой, он может быть разделен на разные блоки и реплицирован в разных рабочих узлах. Слова графа задание состоит из задач map и reduce. Задача map принимает в качестве входных данных каждый блок и создает промежуточную пару ключ-значение. В этом примере, так как мы подсчитывая количество вхождений слов, картограф при обработке блока приведет к промежуточным результатам формы (word1, count1), (word2, count2) и т. д. Промежуточные результаты всех картографов передаются через фазу перемешивания, которая будет переупорядочивать промежуточный результат.
предположим, что вывод нашей карты из разных картографов имеет следующий вид:
Карта 1:- (is, 24) (был,32) (и,12)
Карта2 :- (мой,12) (is, 23) (было 30)
выходные данные карты сортируются таким образом, что одни и те же ключевые значения задаются одному и тому же редуктору. Здесь это означало бы, что ключи, соответствующие is, was и т. д., идут одинаково reducer.It это редуктор, который производит конечный выход,который в этом случае будет:- (а, 12) (есть, 47) (мой, 12) (был,62)
сокращение начинается только после того, как все картографы выловили там задачу, редуктор должен общаться со всеми картографами, поэтому он должен ждать, пока последний картограф не закончит свою задачу.однако mapper начинает передавать данные в тот момент, когда он выполнил свою задачу.
когда Mapper завершает свою задачу, то редуктор начинает свою работу, чтобы уменьшить данные это задание Mapreduce.
задачи редуктора начинаются только после
completionиз всех картографов.но передача данных происходит после
eachкарта. На самом деле это операция вытягивания.это означает, что каждый раз редуктор будет спрашивать каждую maptask, если у них есть некоторые данные для повторного использования с карты.Если они обнаружат , что какой-либо картограф выполнил свою задачу, редуктор вытащит промежуточные данные.
промежуточные данные от Mapper хранятся в
disk. И передача данных от Mapper для уменьшения происходит через сеть (Data Localityне сохраняется в фазе уменьшения)
Comments