Как обеспечить, чтобы задачи MapReduce были независимы друг от друга? - PullRequest
2 голосов
/ 01 марта 2010

Мне любопытно, но как MapReduce, Hadoop и т. Д. Разбивают порцию данных на независимо выполняемые задачи? Я с трудом представляю себе, как это может быть, учитывая, что данные довольно тесно связаны с состоянием состояний между задачами и т. Д.

Спасибо.

1 Ответ

0 голосов
/ 02 марта 2010

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

Карта просто считывает данные в блоках из входных файлов и передает их функции карты по одной «записи» за раз. Запись по умолчанию - это строка (но может быть изменена).

Вы можете комментировать данные в Map с их происхождением, но в основном вы можете делать с Map: классифицировать данные. Вы генерируете новый ключ и новые значения и группы MapReduce новым ключом. Поэтому, если между разными записями существуют отношения: выберите один и тот же (или похожий * 1) ключ для их выдачи, чтобы они сгруппировались.

Для Reduce данные разбиваются на разделы / сортируются (то есть, где происходит группировка), а затем функция Reduce получает все данные из одной группы: один ключ и все связанные с ним значения. Теперь вы можете агрегировать по значениям. Вот и все.

Итак, у вас есть общая группировка, реализованная в MapReduce. Все остальное - ваша ответственность. Вы хотите перекрестный продукт из двух источников? Реализуйте это, например, введя искусственные ключи и мультиизлучение (соединение фрагментов и копий). Ваше воображение это предел. И: вы всегда можете передать данные через другую работу.

* 1: похоже, потому что вы можете повлиять на выбор группировки позже. обычно это группа, тождественная функция, но вы можете изменить это.

...