Сколько карт?
Количество карт обычно определяется общим размером входов, то есть общим количеством блоков входных файлов.
Правильный уровень параллелизма для карт, по-видимому, составляет около 10-100 карт за узел, хотя он был настроен на 300 карт для задач с очень сложным планом. Настройка задачи занимает некоторое время, поэтому лучше всего, чтобы карты выполнялись как минимум на минуту.
Если вы havve 10 ТБ входных данных и размером блока 128 МБ, вы в конечном итоге с 82000 карт, если Configuration.set (MRJobConfig.NUM_MAPS, Int) (который только дает намек на рамки) не является используется для установки еще выше.
Сколько сокращений?
Правильное количество уменьшений, по-видимому, составляет 0,95 или 1,75, умноженное на (< шт. Узлов) * < шт. Максимальных контейнеров на узел>).
С 0.95 все сокращения могут сразу запускаться и начинать передачу выходов карты по завершении карты. С 1.75 более быстрые узлы завершат первый раунд сокращений и запускают вторую волну сокращений, делая намного лучшую работу по балансировке нагрузки.
Увеличение количества сокращений увеличивает издержки на основе структуры, но увеличивает балансировку нагрузки и снижает стоимость сбоев.
Reducer NONE
Это законно, чтобы установить количество снижающих-задач к нулю, если никакого сокращения не требуется
Какие узлы для уменьшить задачи?
Вы можете настроить количество картографов и количество переходников на узел в соответствии с Configuration parameters как mapreduce.tasktracker.reduce.tasks.maximum
, если вы установите этот параметр равным нулю, то этот узел не будет для решения задач сокращения. В противном случае все узлы в кластере имеют право на сокращение задач.
Источник: Map Reduce Tutorial от Apache.
Примечание: Для данного задания, вы можете установить mapreduce.job.maps & mapreduce.job.reduces. Но это может быть неэффективно. Мы должны оставить решения к карте Уменьшить рамочный принять решение о количестве Карты & Сокращения задач
EDIT:
Как решить, какой узел Reducer?
Предположим, что у вас есть одинаковые слоты для снижения, доступные на двух узлах N1 и N2, а текущая нагрузка N1> N2, а затем сокращение задачи будет назначено на N2. Если и загрузка, и количество слотов одинаковы, тот, кто отправит первое сердцебиение менеджеру ресурсов, получит задание. Это кодовый блок для сокращения назначения: http://grepcode.com/file/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-320/org/apache/hadoop/mapred/JobQueueTaskScheduler.java#207
Спросите конкретно, каковы ваши сомнения. Это слишком расплывчато. – YoungHobbit
Если у меня есть кластер, и я запускаю задание MapReduce, как Hadoop решает, сколько узлов будут выполнять задачи карты, а затем какие узлы будут выполнять задачи сокращения? – EricJ
Обновите то же самое. – YoungHobbit