Разница между Fork / Join и Map / Reduce - PullRequest
39 голосов
/ 29 марта 2010

В чем ключевое различие между Fork / Join и Map / Reduce?

Отличаются ли они по типу разложения и распределения (данные и вычисления)?

Ответы [ 2 ]

35 голосов
/ 29 марта 2010

Одно ключевое отличие состоит в том, что F-J , похоже, предназначен для работы на одной виртуальной машине Java, тогда как M-R явно предназначен для работы на большом кластере машин. Это очень разные сценарии.

F-J предлагает средства для разбиения задачи на несколько подзадач рекурсивным образом; больше уровней, возможность «межвилочного» общения на данном этапе, гораздо более традиционное программирование. Не распространяется (по крайней мере, на бумаге) за пределы одной машины. Отлично подходит для использования вашего восьмиядерного.

M-R делает только одно большое разделение, при этом отображенные разделители вообще не разговаривают друг с другом, а затем сводят все вместе. Одноуровневый, без межсетевого обмена данными, пока не будет сокращен, и масштабируемый. Отлично подходит для использования вашей доли в облаке.

12 голосов
/ 10 сентября 2013

На эту тему есть целая научная статья, Сравнение Fork / Join и MapReduce .

В статье сравниваются производительность, масштабируемость и программируемость трех параллельных парадигм: fork / join, MapReduce и гибридный подход.

Они обнаруживают, что в основном Java-форк / соединение имеет низкую задержку при запуске и хорошо масштабируется для небольших входных данных (<5 МБ), но не может обрабатывать большие входные данные из-за ограничений размера разделяемой памяти, одноузловые архитектуры. С другой стороны, MapReduce имеет значительную задержку запуска (десятки секунд), но хорошо масштабируется для гораздо больших входов (> 100 МБ) в вычислительном кластере.

Но есть много чего почитать, если вы готовы.

...