2016-03-08 72 views
0

如果输出太大以至于不适合减速器RAM,该怎么办? 例如一个排序任务。在这种情况下,输出与输入一样大。如果你使用一个reducer,那么所有的数据都不适合RAM。如何进行分类呢?是否可以用一个reducer执行任何mapreduce任务?

+0

你为什么认为这发生在RAM中?它完全在磁盘上完成。 –

+0

它是否像外部合并排序一样完成?在聚合的情况下会发生什么?是否每次写入reduce()调用都写入磁盘? – Arighna

回答

1

我想我已经得到了答案。 是的,即使数据大于reduce的内存,也可以在单个reducer中执行任何map任务。在混洗阶段,减速器将数据从映射器复制到减速器的内存,并对其进行分类,直到其溢出。一旦溢出内存,部分数据存储在reducer本地磁盘中,并开始获取新值。一旦它再次溢出,它将新数据与先前存储的文件合并。合并的文件维护排序的时尚(可能使用外部合并排序)。一旦混洗完成了中间密钥,数值对以分类方式存储。然后对该数据执行减少任务。随着数据的排序,通过在内存中一次获取大量数据很容易进行内存中的聚合。

相关问题