0

为什么在 Hadoop Yarn 内存配置中,reducer 总是比 mapper 获得更多的内存?

例子:

mapreduce.map.memory.mb = 7
mapreduce.reduce.memory.mb = 14
mapreduce.map.java.opts = 0.8 * 7 = 5,6
mapreduce.reduce.java.opts = 0.8 * 2 * 7 = 11,2
4

1 回答 1

0

为了概括对 YARN MRv2 配置的建议,供应商将为他们遇到的常见用例提供内存建议,并在社区中进行了讨论。就像其他任何建议一样,本建议就是这种情况。

简而言之,Mappers filter 和 Reducers 聚合。

但是他们提出这个建议的原因是因为在 MapReduce 数据流中,我们有几个阶段:Map、Copy、Sort/Merge、Reduce。映射器以分区块的形式获取数据,然后使用 Map 方法对其进行过滤。此过滤器减少来自输入的数据量。

然后这个输出保存在 HDFS 中并通过 HTTP 与 Reducers 共享。这负责 Map 和 Copy 阶段。因此,如果您可以想象我们让每个映射器使用框架根据 MR Partitioner 指定的相同内存要求。

现在,在 Merge 阶段,reducers 从复制阶段调用此输出并分阶段合并它。合并在内存中完成,典型的应用程序将受益于增加的内存。我们在 MR 框架中对 Reducers 有更多的控制,因为这个选项是可配置的,我们可能需要单个 reduce 输出(在总排序的情况下)或简单地少于 MR 为我们确定的映射器数量,具体取决于建立了分区机制。无论哪种方式,我们都会收到(后随机播放)类似于以下内容的输入(Key, List(Value)):该列表是我们汇总的内容,也是保持内存高于映射器的另一个原因。

于 2015-05-22T17:44:39.883 回答