«Простая» Java-программа и реализация на основе Hadoop, основанная на MapReduce, очень разные звери и их трудно сравнивать. Это не значит, что Hadoop распараллеливает немного вашей программы; оно написано в совершенно другой форме сверху вниз.
У Hadoop есть накладные расходы: только накладные расходы при запуске работы и при запуске рабочих, таких как картографы и редукторы. Он вводит гораздо больше времени, затрачиваемого на сериализацию / десериализацию данных, их локальную запись и перенос в HDFS.
Реализация на основе Hadoop всегда будет потреблять больше ресурсов. Так что этого следует избегать, если вы не можете избежать этого. Если вы можете запускать нераспределенные вычисления на одной машине, самый простой практический совет - не распространять. Избавь себя от неприятностей.
В случае рекомендаций Mahout, я могу сказать вам, что очень грубо, работа Hadoop требует в 2-4 раза больше вычислений, чем нераспределенная реализация с теми же данными. Очевидно, что это очень сильно зависит от алгоритма и выбора настроек алгоритма. Но вот вам номер: я не стал бы беспокоиться о кластере Hadoop, состоящем менее чем из 4 машин.
Очевидно, что если ваши вычисления не могут поместиться на одном из ваших компьютеров, у вас нет другого выбора, кроме как распространять. Тогда компромисс - это то, какое время настенных часов вы можете позволить, а не сколько вычислительной мощности вы можете посвятить. Ссылка на закон Амдаля верна, хотя и не учитывает значительных издержек Hadoop. Например, чтобы распараллелить N способов, вам нужно по крайней мере N картографов / редукторов и использовать N раз для накладных расходов на картограф / редуктор. Также есть фиксированное время запуска / выключения.