【发布时间】:2014-05-26 08:33:18
【问题描述】:
我们有一个不错的、大型的、复杂的 elastic-mapreduce 作业,它对 Mapper、Collector 和 Reducer 的硬件限制大相径庭。
问题是:对于映射器,我们需要大量的轻量级机器来并行运行多个映射器(一切都很好);收集器更需要内存,但给他们每个 6GB 的峰值堆应该还是可以的。 . .但是,问题是减速器。当其中一个启动时,它将占用大约 32-64GB 的空间进行处理。
结果我们得到一个循环类型的任务死亡,因为一个盒子的全部内存被消耗了,这导致一个映射器和减速器都在其他地方重新启动。
最简单的方法是,如果我们能以某种方式指定一种方法,让 reducer 在不同的“组”(少数几个巨大的盒子)上运行,同时让映射器/收集器在较小的盒子上运行。这也可以显着节省成本,因为我们真的不应该根据减速器的需求来调整映射器运行的节点。
另一种方法是“分解”作业,以便有一个可以旋转的第二个集群来处理映射器收集器的输出——但是,这显然是“次优的”。
所以,问题是:
- 有没有办法指定映射器或化简器将要“分组”的内容 在 Elastic MapReduce 和/或 Hadoop 上运行?
- 有没有办法阻止减速器在所有映射器完成之前启动?
- 是否有人对如何解决此问题有其他想法?
干杯!
【问题讨论】:
-
选项 2 是。您可以让 reducer 等到整个映射阶段完成。
-
关于如何实现这一点的任何提示?
标签: hadoop amazon-web-services elastic-map-reduce mapper reducers