运行 多个 "light" mapreduce 或单个 "heavy" mapreduce

Running multiple "light" mapreduce or a single "heavy" mapreduce

我正在编写一个 mapreduce 程序,它将 运行 在 AWS EMR 上。
我的程序根据 google ngram 语料库计算概率。
我想知道 运行一次处理所有计算的单个 mapreduce 和每次处理一个计算的多个 mapreduce 之间是否有区别。
两者都是在不使用任何数据结构(数组、列表...)的情况下完成的。
在效率方面有区别吗?还是网络通信?
两者都以相同的方式做完全相同的事情,我只是将计算与减速器的工作分开。

是的,它们之间会有差异,但差异的大小取决于您的 map reduce 程序。

差异的原因是当你将 运行 多个光照贴图缩减程序时,将开始启动和执行多个贴图和缩减器,因为每个贴图缩减程序在启动时需要为哪个应用程序主机必须在资源管理器和节点管理器之间来回通信,生成新的日志文件,需要名称节点和数据节点之间的网络通信,类似地还有许多其他问题。因此,如果您的程序不是那么大,那么单一的 heavy map reduce 比各种 light map reduce 更好。

但是,如果您的单个 map reducer 程序太大且复杂,导致 JVM 和内存堵塞(我认为这种情况极不可能,除非您的集群硬件太小),那么多个小型 map reduce 更可行.

根据你的问题,我的直觉是你的 map reduce 没有那么大,所以我建议你继续使用单一的 heavy map reduce。