Как hadoop решает, сколько узлов будет отображать и сокращать задачи
Я новичок в hadoop и пытаюсь это понять. Я говорю о hadoop 2. Когда у меня есть входной файл, который я хочу сделать MapReduce, в программе MapReduce я говорю параметр Split, поэтому он будет выполнять столько же задач карты, сколько split, верно?
Менеджер ресурсов знает, где находятся файлы, и отправит задачи узлам, у которых есть данные, но кто скажет, сколько узлов выполнит задачи? После того, как карты будут добавлены, будет случайное перемешивание, какой узел будет выполнять задачу сокращения, решается разделителем, который делает хэш-карту, верно? Сколько узлов будет уменьшать количество задач? Будут ли узлы, создавшие карты, слишком сокращать задачи?
Спасибо.
TLDR: если у меня есть кластер и я запускаю задание MapReduce, как Hadoop решает, сколько узлов будет выполнять задачи сопоставления, а затем какие узлы будут выполнять задачи сокращения?
2 ответа
Сколько карт?
Количество карт обычно определяется общим размером входных данных, то есть общим количеством блоков входных файлов.
Правильный уровень параллелизма для карт, кажется, составляет около 10-100 карт на узел, хотя он был настроен на 300 карт для очень простых задач карты. Настройка задачи занимает некоторое время, поэтому лучше, если для выполнения карт требуется не менее минуты.
Если у вас есть 10 ТБ входных данных и размер блока 128 МБ, в итоге вы получите 82 000 карт, если Configuration.set(MRJobConfig.NUM_MAPS, int) (который предоставляет только подсказку для фреймворка) не используется, чтобы установить его еще выше,
Сколько уменьшает?
Правильное число сокращений, по-видимому, равно 0,95 или 1,75, умноженному на (<количество узлов> * <число максимальных контейнеров на узел>).
С 0,95 все сокращения могут начаться немедленно и начать передавать выходные данные карты, когда карты заканчиваются. С 1,75 более быстрые узлы завершат свой первый раунд сокращений и запустят вторую волну сокращений, что значительно улучшит балансировку нагрузки.
Увеличение числа сокращений увеличивает накладные расходы платформы, но увеличивает балансировку нагрузки и снижает стоимость сбоев.
Редуктор НЕТ
Допустимо устанавливать число задач сокращения на ноль, если уменьшение не требуется
Какие узлы для задач уменьшить?
Вы можете настроить количество картографов и количество редукторов на узел в соответствии с параметрами конфигурации, такими как mapreduce.tasktracker.reduce.tasks.maximum
если вы установите этот параметр равным нулю, этот узел не будет рассматриваться для задач Сокращения. В противном случае все узлы в кластере имеют право на задачи сокращения.
Источник: Map Reduce Tutorial от Apache.
Примечание. Для данного задания вы можете установить mapreduce.job.maps & mapreduce.job.reduces. Но это может быть неэффективно. Мы должны оставить решения для Map Reduce Framework, чтобы принять решение о количестве задач Map & Reduce
РЕДАКТИРОВАТЬ:
Как решить, какой узел редуктора?
Предположим, что у вас есть равные интервалы уменьшения, доступные на двух узлах 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
как Hadoop решает, сколько узлов будет выполнять задачи карты
По умолчанию количество картографов будет таким же, как количество разделенных (блоков) входных данных для mapreduce.
Теперь об узлах. В Hadoop 2 каждый узел запускается самостоятельно. NodeManager
(Нью-Мексико). Задача NM - управлять контейнером приложения, назначенным ему Resourcemanager
(РМ). В общем, каждая задача будет выполняться в отдельном контейнере. Чтобы запустить задачи маппера, ApplicationMaster
договориться о контейнере от ResourceManager
, Как только контейнеры распределены, NodeManager
запустит задачу и будет следить за ней.
какие узлы будут выполнять задачи сокращения?
Снова задачи сокращения также будут выполняться в контейнерах. ApplicationMaster
(per-application (job)) будет согласовывать контейнеры с RM и запускать задачи редуктора. В основном они работают на разных узлах, чем узлы Mapper.
Количество редукторов для любого задания по умолчанию равно 1. Количество редукторов можно задать в конфигурации задания.