Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Вы можете настроить при запуске редукторов, изменив значение по умолчанию 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, если система когда-либо запускает сразу несколько заданий. Таким образом, задание не подведет редукторы, когда они ничего не делают, кроме копирования данных. Если вы только когда-либо выполняете одно задание, то 0.1, вероятно, будет уместным.

Ответ 2

Фаза уменьшения может начинаться задолго до того, как вызывается редуктор. Как только "a" обработчик завершает работу, сгенерированные данные подвергаются некоторой сортировке и перетасовке (которая включает вызов объединителя и разделителя). Начальная фаза редуктора начинается в момент начала обработки данных после картографирования. По мере выполнения этой обработки вы увидите прогресс в процентном отношении редукторов. Тем не менее, ни один из редукторов еще не был вызван. В зависимости от количества доступных/используемых процессоров, характера данных и количества ожидаемых редукторов, вы можете изменить параметр, как описано выше. Дональд-майнер выше.

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Карта 1: - (Это, 24) (Был, 32) (И, 12)

Map2: - (Мой, 12) (Это, 23) (Был, 30)

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

Ответ 7

Задачи редуктора начинаются только после completion всех картографов.

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

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

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

Ответ 8

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