在不同的计算机组上运行Mappers和Reducers

时间:2014-04-12 02:08:28

标签: hadoop amazon-web-services elastic-map-reduce mapper reducers

我们有一个漂亮,大而复杂的弹性mapreduce作业,对Mapper vs Collector vs Reducer的硬件有着截然不同的限制。

问题是:对于Mappers,我们需要数吨轻量级机器来并行运行多个映射器(一切都很好);收藏家的内存需要更多,但是每个收集器的峰值堆应该还是可以的。 。 。但是,问题是减速机。当其中一个开始时,它将获得大约32-64GB的处理。

结果是我们得到了一个循环类型的任务死亡,因为消耗了一个盒子的完整内存,这导致一个mapper和reducer都重新启动到其他地方。

最简单的方法是,如果我们可以某种方式指定一种方法让减速器在不同的组上运行" (少数几个巨大的盒子)同时让映射器/收集器在较小的盒子上运行。这也可以带来显着的成本节约,因为我们真的不应该根据减速器的要求确定映射器节点的大小。

另一种选择是"分手"这项工作使得第二个集群可以旋转以处理映射器收集器的输出 - 但是,这显然是次优的"。

所以,问题是:

  • 有没有办法确定"群组"映射器或减速器将 运行Elastic MapReduce和/或Hadoop?
  • 有没有办法阻止减速器在所有映射器完成之前启动?
  • 有没有人对如何处理此问题有其他想法?

干杯!

1 个答案:

答案 0 :(得分:0)

在Hadoop MapReduce作业期间,Reducers在所有Mapper完成后开始运行。在进行分区之前对Map阶段的输出进行混洗和排序,以确定哪个Reducer接收哪些数据。因此,在Shuffle / Sort阶段结束后(在映射器完成之后),Reducers开始运行。