MapReduce是否适合解决单机多核内存环境中的问题?

Fel*_*mel 6 algorithm parallel-processing concurrency mapreduce

MapReduce抽象是否适用于处理即使在单个机器中的问题?例如,我有一个12核的机器,我必须计算数千个文件中的单词(经典的MapReduce示例).

考虑到我们正在使用单个硬盘驱动器的单台机器上工作,在多线程中使用Mapper和Reducers的MapReduce实现是解决此问题的好方法吗?

我想我的问题归结为:MapReduce范例仅适用于在一组机器中工作吗?

Nie*_*jes 8

通常,您可以有两种情况:

  1. 您的问题,小到足以放入您的单一系统的内存和单系统拥有足够的CPU电源所需的时间内解决问题.
  2. 你的问题太大了.2.1运行时间太长(磁盘IO和/或CPU时间)2.2太大而无法装入内存(RAM).

对于2.1和2.2,MapReduce范例有助于将工作分成许多较小的块.如果您需要更多CPU,只需添加CPU即可.

因此,如果你有一个单独的系统并且事实证明你的问题太大而无法放入内存(第2.2点),你仍然可以从MapReduce可以轻松地将问题的一部分放在磁盘上直到该部分被处理这一事实中受益.

重要的事实是,如果您的问题足够小以适应内存并且足够小以便在单个系统上进行处理,那么专用(非MapReduce)解决方案可以快得多.


Kir*_*ril 2

我想我的问题可以归结为:MapReduce 范式只适合在机器集群中工作吗?

一般来说,是的:MapReduce 在单台 PC 上的效率可能较低。我想不出在非分布式环境(即单台 PC、单硬盘)中使用时 MapReduce 会比更多资源优化方法具有优势的许多(如果有的话)情况。换句话说,如果您试图充分利用单台 PC 的每一点性能,那么您很可能可以使用自定义解决方案而不是 MapReduce 来实现这一目标。

但是,如果您计划添加更多节点并创建集群,那么 MapReduce 将是首选范例。