我正在编写一个可在AWS EMR上运行的mapreduce程序
我的程序计算google ngram语料库中的概率
我想知道运行一次处理所有计算的mapreduce和多次处理一次计算的mapreduce之间是否存在差异。
两者都是在不使用任何数据结构(数组,列表......)的情况下完成的
效率方面有区别吗?或网络通讯?
两者都以相同的方式完全相同,我只将计算器与减速器的工作分开。
答案 0 :(得分:0)
是的,它们之间会有区别,但差异的大小取决于你的地图缩减程序。
差异的原因是当您运行多个光照贴图减少程序时,当启动需要分配应用程序主机必须进行通信的容器时,将会开始执行多个map和reducer,因为每个map减少程序在资源管理器和节点管理器之间来回,生成新的日志文件,需要名称节点和数据节点之间的网络通信,类似地还有许多其他的头部。因此,如果您的程序不是那么大,那么单个重图减少会比各种光图减少更好。
但是如果你的单个map reducer程序太大而复杂,以至于它会导致JVM和内存堵塞(除非你的集群硬件太小,否则这种情况极不可能),那么多个小地图缩减更为可行。 / p>
从你的问题我有一个直觉,你的地图缩小不是那么大,所以我建议你继续单重地图缩小。