2015-10-22 1 views
0

Я новичок в hadoop, и я пытаюсь понять это. Я говорю о hadoop 2. Когда у меня есть файл ввода, который я хочу сделать MapReduce, в программе MapReduce я говорю параметр Split, поэтому он будет делать так много задач карты, как разделение, не так ли?Как hadoop решает, сколько узлов будут делать карту и уменьшать задачи

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

спасибо.

TLDR: Если у меня есть кластер, и я запускаю задание MapReduce, как Hadoop решает, сколько узлов будут выполнять задачи карты, а затем какие узлы будут выполнять задачи сокращения?

+0

Спросите конкретно, каковы ваши сомнения. Это слишком расплывчато. – YoungHobbit

+0

Если у меня есть кластер, и я запускаю задание MapReduce, как Hadoop решает, сколько узлов будут выполнять задачи карты, а затем какие узлы будут выполнять задачи сокращения? – EricJ

+0

Обновите то же самое. – YoungHobbit

ответ

2

Сколько карт?

Количество карт обычно определяется общим размером входов, то есть общим количеством блоков входных файлов.

Правильный уровень параллелизма для карт, по-видимому, составляет около 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

+0

Хорошо, спасибо, как решается, какой узел будет выполнять работу по сокращению? Случайно? Я имею в виду, как hasoop распределяет «ключи», узел сокращается. – EricJ

+0

Это зависит от нагрузки на узлы и количество слотов для уменьшения, доступных в этом узле. –

+0

Да, но я хочу знать, как он решает, к какому узлу он отправит задачу уменьшения, например, у вас есть 10 узлов и 5 выполнены картографические задачи, как он решает, куда отправлять разные задачи сокращения в кластере? – EricJ

1

как делает Hadoop решает, сколько узлов будут делать карту задачу

По умолчанию количества картографов будет такими же, как количество разделения (блоки) на вход в MapReduce.

Теперь о узлах, в Hadoop 2 каждый узел запускает собственный NodeManager (NM). Задачей NM является управление контейнером приложения, назначенным ему Resourcemanager (RM). Таким образом, каждая задача будет выполняться в отдельном контейнере. Для выполнения задач картографа ApplicationMaster согласовывает контейнер с ResourceManager. Как только контейнеры будут выделены, NodeManager запустит задачу и проверит ее.

какие узлы будут выполнять задачи сокращения?

Опять же задачи сокращения также будут выполняться в контейнерах. ApplicationMaster (за приложение (задание)) будет вести переговоры с контейнерами из RM и запускать задачи редуктора. В основном они работают на разных узлах, а затем на узлах Mapper.

Число редукторов по умолчанию для любого задания равно 1. Количество редукторов может быть задано в конфигурации задания.

+0

Но каждый узел будет делать больше, чем задание карты? Итак, как hasoop решает, сколько всего узлов будет выполнять работу? Thx – EricJ

+0

@ Эрик Задачи выполняются в контейнерах не в узле. Один узел может поддерживать несколько контейнеров. Узлам, имеющим доступный процессор и память, будет присвоено задание. – YoungHobbit