Почему распределенная обработка Hadoop Mapreduce занимает больше времени, чем обычная последовательная обработка? - PullRequest
0 голосов
/ 08 апреля 2019

Я написал простой код на Java для чтения CSV-файла, внесения небольших изменений в строки (с использованием хэшей) и последующей записи в выходной файл.

Я хотел сравнить последовательную версию (обычный Java) и версию кода MapReduce. (Коды не имеют большой разницы).

Я пробовал коды как в псевдораспределенном hadoop (один узел), так и в полностью распределенном hadoop (3 узла), но, к моему удивлению, время выполнения версии MapReduce всегда выше, чем последовательного (приблизительно два или три раза) ).

У меня нет большого опыта работы с Hadoop, но, по крайней мере, распределенная обработка должна занимать меньше времени, чем последовательная обработка (потому что именно поэтому у нас распределенная обработка). Я даже пробовал разные размеры набора данных.

1 Ответ

2 голосов
/ 08 апреля 2019

Каждый параллельный алгоритм имеет дополнительные издержки по сравнению с его последовательным аналогом - эти издержки могут быть созданием потоков и обслуживанием на одной машине, но в основном это издержки связи - распределение исходных данных, IPC (межпроцессное взаимодействие), сбор частичных результатови / или комбинируя его.

Эффективность алгоритма зависит от различных факторов - очевидно, от размера ввода, а также количества узлов, которые вы используете для вычисления - см. изоэффективность .Использование большего количества машин не всегда означает более быстрое время обработки.Используя уравнения изоэффективности, вы можете вычислить, сколько узлов вы должны использовать для фиксированного размера задачи, чтобы максимизировать эффективность.

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

...