Как Hadoop принимает решение о распределении между сегментами/узлами?

Я новичок в фреймворке Map/Reduce и Hadoop. Я запускаю программу Hadoop на одной машине (чтобы попробовать). У меня есть n входных файлов, и мне нужна сводка слов из этих файлов. Я знаю, что функция карты возвращает пару ключ-значение, но как называется карта? Один раз в каждом файле или Один раз в каждой строке каждого файла? Могу ли я настроить его?

Правильно ли предположить, что для каждой клавиши вызывается «reduce»?


person Palash Kumar    schedule 22.09.2013    source источник


Ответы (2)


В структуре Hadoop MR средство отслеживания заданий создает задачу сопоставления для каждого InputSplit в соответствии с InputFormat, заданным вашим заданием. Каждый Inputsplit, назначенный задаче карты, далее обрабатывается RecordReader для создания входных пар ключ/значение для функции карты. Функция карты вызывается для каждой пары ключ/значение, созданной RecordReader.

Для InputFormat по умолчанию, то есть TextInputFormat, разделение ввода будет представлять собой один блок HDFS, который будет обрабатываться одной задачей карты, а RecordReader будет обрабатывать одну строку за раз. время внутри блока и сгенерировать пару ключ/значение, где ключ — это байтовое смещение начала строки в файле, а значение — это содержимое строки, которое будет передано в функцию карты.

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

Дополнительные сведения о InputFormat и его настройке см. в этой документации YDN:

http://developer.yahoo.com/hadoop/tutorial/module5.html#inputformat

person rVr    schedule 14.10.2013

Карта вызывается для одного InputSplit (или сокращенно split), и это обязанность InputFormat, которую вы используете в своем задании MR, создавать эти разделения. Это может быть одна строка, несколько строк, один файл целиком и так далее, в зависимости от логики вашего InputFormat. Например, InputFormat по умолчанию, т. е. TextInputFormat, состоит из одной строки.

Да, вы можете настроить его, изменив формат ввода, который вы используете.

Все значения, соответствующие определенному ключу, объединяются, а несколько ключей разбиваются на разделы, и весь раздел отправляется в редуктор для дальнейшей обработки. Таким образом, все значения, соответствующие определенному ключу, обрабатываются одним редьюсером, но один редьюсер может получить несколько ключей.

person Tariq    schedule 22.09.2013