Разница между Fork/Join и Map/Reduce

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам