Является ли MapReduce просто обобщением другого принципа программирования? - PullRequest
3 голосов
/ 09 марта 2010

Я занимаюсь параллельным программированием и изучаю mapreduce и другие распределенные алгоритмы. Лучше всего просто изучить mapreduce или есть более общий алгоритм, который будет лучше служить мне?

Ответы [ 4 ]

4 голосов
/ 09 марта 2010

Зависит от того, для чего вы собираетесь использовать алгоритм (ы).

MapReduce - это обобщенная и очень полезная модель программирования. (Google основывает на этом многие внутренние процессы индексации). Изучение этого, конечно, не принесет вам никакого вреда.

MapReduce - это модель программирования и связанная реализация для обработка и генерация больших данных наборы. Пользователи указывают функцию карты который обрабатывает пару ключ / значение в генерировать набор промежуточных пары ключ / значение и функция сокращения который объединяет все промежуточные значения связаны с тем же промежуточным ключ. Многие реальные задачи выразим в этой модели, как показано в бумага.

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

Стремитесь к:

  • Большая зернистость рабочих кусков
  • Сохранение размера рабочих кусков аналогично размеру
  • Минимизировать количество шагов синхронизации
2 голосов
/ 09 марта 2010

Для многих «обычных» последовательных алгоритмов существуют параллельные версии, некоторые из которых можно смоделировать с помощью MapReduce. Конечно, изучите MapReduce, поскольку он является новым и увлекательным, но это просто еще один инструмент в вашем наборе инструментов, и вы, безусловно, можете узнать больше, поскольку существуют ограничения для MapReduce (и вы узнаете о них).

2 голосов
/ 09 марта 2010

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

Mapreduce - это композиция операций map и reduce. Это типичные функции высшего порядка, которые предоставляют функциональные языки.

Я бы рекомендовал сначала выучить функциональный язык, например Scheme или Clojure. Для Схемы, «Структура и Интерпретация компьютерных программ», кажется, в моде.

1 голос
/ 10 марта 2010

Чтобы по-настоящему оценить параллельное программирование, вы должны изучить несколько моделей параллельного программирования, а не только одну среду параллельного программирования. Вам следует изучить подходы к параллельному программированию как для совместной памяти (например, pthreads), так и для передачи сообщений (например, MPI и MapReduce).

MPI - инструмент общего назначения для создания приложений для передачи сообщений. Если вы интенсивно используете MPI, вы обнаружите, что некоторые элементы MPI-программ повторяются снова и снова, например, настраивая «главный» процесс, который разделяет работу на «рабочие» процессы и агрегирует результаты. MapReduce является частной реализацией среды передачи сообщений и предоставляет более простую модель программирования, чем MPI. Он заботится о коде, который встречается довольно часто в параллельных приложениях, и, что более важно, заботится о таких проблемах, как восстановление после сбоев и локальность данных. Hadoop с открытым исходным кодом пытается имитировать MapReduce.

Я думаю, вы сможете лучше оценить, что делает MapReduce и как его можно реализовать, написав несколько собственных программ MPI. Изучение Hadoop не повредит, но когда дело доходит до общих знаний о параллельном программировании, полезно знать основы, такие как pthreads, OpenMP и MPI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...