Разница между вилкой/соединением и картой/уменьшением
В чем ключевое различие между Fork/Join и Map/Reduce?
Различаются ли они в разложении и распределении (данные против вычисления)?
Ответ 1
Одно из ключевых отличий заключается в том, что FJ, похоже, предназначен для работы на одной виртуальной машине Java, а MR явно предназначен для работы на большом кластере машин. Это очень разные сценарии.
F-J предлагает средства для разбивки задачи на несколько подзадач в рекурсивном режиме; больше уровней, возможность "межфокусного общения" на этом этапе, гораздо более традиционное программирование. Не распространяется (по крайней мере, на бумаге) за пределы одной машины. Отлично подходит для использования вашего восьмиядерного процессора.
M-R делает только один большой раскол, при этом отображаемые расщепления не разговаривают между собой вообще, а затем сводят все вместе. Единый уровень, без межсетевого обмена до уменьшения и масштабируемость. Отлично подходит для использования вашей доли облака.
В документе сравниваются производительность, масштабируемость и программируемость трех параллельных парадигм: fork/join, MapReduce и гибридный подход.
Что они находят, в основном, что Java вилки/нарисуй имеет низкую задержку запуска и хорошо масштабируется для маленьких входов (< 5МБЫ), но он не может обрабатывать большие входы из-за ограничения размера разделяемой-память,
одиночная архитектура node. С другой стороны, MapReduce имеет значительную задержку запуска (десятки секунд), но хорошо масштабируется для гораздо больших входов ( > 100 Мбайт) в вычислительном кластере.
Но есть еще многое, что можно прочитать там, если вы готовы к этому.