我们有一个漂亮,大而复杂的弹性mapreduce作业,对Mapper vs Collector vs Reducer的硬件有着截然不同的限制。
问题是:对于Mappers,我们需要数吨轻量级机器来并行运行多个映射器(一切都很好);收藏家的内存需要更多,但是每个收集器的峰值堆应该还是可以的。 。 。但是,问题是减速机。当其中一个开始时,它将获得大约32-64GB的处理。
结果是我们得到了一个循环类型的任务死亡,因为消耗了一个盒子的完整内存,这导致一个mapper和reducer都重新启动到其他地方。
最简单的方法是,如果我们可以某种方式指定一种方法让减速器在不同的组上运行" (少数几个巨大的盒子)同时让映射器/收集器在较小的盒子上运行。这也可以带来显着的成本节约,因为我们真的不应该根据减速器的要求确定映射器节点的大小。
另一种选择是"分手"这项工作使得第二个集群可以旋转以处理映射器收集器的输出 - 但是,这显然是次优的"。
所以,问题是:
干杯!
答案 0 :(得分:0)
在Hadoop MapReduce作业期间,Reducers在所有Mapper完成后开始运行。在进行分区之前对Map阶段的输出进行混洗和排序,以确定哪个Reducer接收哪些数据。因此,在Shuffle / Sort阶段结束后(在映射器完成之后),Reducers开始运行。