Параллельное уменьшение с помощью Hadoop mapreduce - PullRequest
1 голос
/ 23 июля 2011

Я использую MapReduce от Hadoop.У меня есть файл в качестве входных данных для функции карты, функция карты делает что-то (не имеет отношения к вопросу).Я бы хотел, чтобы мой редуктор взял вывод карты и записал в два разных файла.С моей точки зрения (я хочу эффективное решение), у меня на уме два пути:

  1. 1 редуктор, который будет знать, как идентифицировать разные случаи и записывать в 2 разных контекста.
  2. 2 параллельных редуктора, которые каждый будет знать, чтобы идентифицировать свой соответствующий вход, игнорируя другой, и таким образом каждый будет записывать в файл (каждый редуктор будет записывать в другой файл).

Я бы предпочел первое решение, потому что оно означает, что я перейду к выводу карты только один раз, а не дважды параллельно - но если первое не поддерживается каким-либо образом - я буду рад услышатьРешение для второго предложения.

* Примечание. Предполагается, что эти два окончательных файла разделены, и нет необходимости в их объединении.

Ответы [ 2 ]

3 голосов
/ 24 июля 2011

Hadoop API имеет функцию для создания нескольких выходов под названием MultipleOutputs , которая делает возможным ваше предпочтительное решение.

1 голос
/ 26 июля 2011

Если на этапе карты вы знаете, к какому файлу должна поступить запись, вы можете пометить вывод своей карты специальным ключом, указывающим, к какому файлу он должен идти.Например, если запись R1 должна идти в файл 1, вы должны вывести <1, R1> .. (1 - это ключ .. символическое представление для file1, а R1 - значение). Если запись R2 должна перейти в файл 2вывод вашей карты будет <2, R2>.

Тогда, если вы сконфигурируете карту сократить задание на использование только 2 редукторов ... это гарантирует, что все записи, отмеченные <1, _>, будут отправлены1 редуктор и <2, _> будут отправлены другому.

Это было бы лучше, чем ваше предпочтительное решение, поскольку вы по-прежнему просматриваете свою карту только один раз ... и в то же время это будет параллельно.

...