我们有一个很好的、大的、复杂的 elastic-mapreduce 作业,它对 Mapper、Collector 和 Reducer 的硬件有截然不同的限制。
问题是:对于映射器,我们需要大量的轻量级机器来并行运行多个映射器(那里都很好);收集器更需要内存,但给它们每个 6GB 的峰值堆应该还是可以的。. . 但是,问题是减速器。当其中一个启动时,它将占用大约 32-64GB 的空间进行处理。
结果是我们得到了循环类型的任务死亡,因为一个盒子的全部内存被消耗了,这导致一个映射器和减速器都在其他地方重新启动。
最简单的方法是,如果我们能以某种方式指定一种方法,让 reducer 在不同的“组”(少数几个巨大的盒子)上运行,同时让映射器/收集器在较小的盒子上运行。这也可以显着节省成本,因为我们真的不应该根据减速器的需求来调整映射器正在运行的节点的大小。
另一种方法是“分解”工作,以便有一个可以旋转的第二个集群来处理映射器收集器的输出——但是,这显然是“次优的”。
所以,问题是:
- 有没有办法指定映射器或减速器将在 Elastic MapReduce 和/或 Hadoop 上运行的“组”?
- 有没有办法阻止减速器在所有映射器完成之前启动?
- 有没有人对如何解决这个问题有其他想法?
干杯!