MapReduce抽象是否适用于处理单个机器中的问题? 例如,我有一个12核的机器,我必须计算数千个文件中的单词(经典的MapReduce示例)。
在多线程中使用Mapper和Reducers的MapReduce实现是解决这个问题的好方法,考虑到我们正在使用单个硬盘驱动器的单台机器上工作?
我想我的问题归结为:MapReduce范例仅适用于在一组机器中工作吗?
答案 0 :(得分:8)
通常,您可以有两种情况:
对于2.1和2.2,MapReduce范例有助于将工作分成许多较小的块。如果您需要更多CPU,只需添加CPU即可。
因此,如果你有一个系统并且事实证明你的问题太大而无法放入内存(第2.2点),你仍然可以从MapReduce可以轻松地将部分问题放到磁盘上直到该部分是待处理。
重要的事实是,如果你有一个小到足以容纳内存的问题,并且小到足以在单个系统上处理,那么专用(非MapReduce)解决方案可以快得多。
答案 1 :(得分:1)
我想我的问题归结为:MapReduce范例仅适用于在一组机器中工作吗?
通常,是的:MapReduce在单台PC上的效率可能较低。我想不出很多(如果有的话)情况,当在非分布式环境(即单个PC,单个硬盘驱动器)中使用时,MapReduce优于更多资源优化方法。换句话说,如果你试图从你的单个PC中挤出一点点性能,你很可能能够通过自定义解决方案而不是MapReduce来实现它。
但是,如果您计划添加更多节点并创建群集,那么MapReduce将成为首选范例。