在不同的机器组上运行Map器和还原器

au9on6nz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(435)

我们有一个很好的、很大的、复杂的弹性mapreduce工作,它对mapper与collector与reducer的硬件约束有很大的不同。
问题是:对于Map绘制者来说,我们需要成吨的轻量级机器来并行运行多个Map绘制者(在那里都很好);收集器对内存的需求更大,但是给每个收集器大约6gb的峰值堆应该还是可以的。但是,问题是减速器。当其中一个启动时,它将占用大约32-64gb的处理空间。
结果是我们得到了一个round-robbin类型的任务死亡,因为一个box的全部内存被消耗,这导致一个mapper和reducer都在别处重新启动。
最简单的方法是,如果我们可以指定一种方法,让reducer在不同的“组”(一小部分巨大的框)上运行,而让mappers/collector在较小的框上运行。这也可能导致显著的成本节约,因为我们真的不应该根据缩减器的需求来调整Map器所运行的节点的大小。
另一种方法是“分解”作业,这样就有第二个集群可以旋转起来处理mappers收集器的输出——但是,这显然是“次优的”。
所以,问题是:
有没有办法指定Map器或reducer在弹性mapreduce和/或hadoop上运行的“组”?
有没有办法阻止减速器启动,直到所有的Map完成?
有人对如何处理这个问题有其他想法吗?
干杯!

tmb3ates

tmb3ates1#

在hadoopmapreduce作业期间,在完成所有Map程序之后,reducer开始运行。map阶段的输出在进行分区之前被洗牌和排序,以决定哪个reducer接收哪些数据。因此,在shuffle/sort阶段结束后(Map程序完成后),reducer开始运行。

相关问题