为什么reducer比mapper获得更多的内存?

mwngjboj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(381)

为什么在hadoopYarn内存配置中,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
b4lqfgs4

b4lqfgs41#

为了推广对yarn mrv2配置的建议,供应商将为他们遇到并在社区中讨论过的常见用例提供内存建议。与其他建议一样,本建议也是如此。
简而言之,Map器过滤和还原器聚合。
但他们之所以提出这个建议,是因为在mapreduce数据流中,我们有两个阶段:Map、复制、排序/合并、reduce。Map程序将数据分成分区块,然后使用map方法对其进行过滤。这个过滤器减少了输入的数据量。
然后这个输出保存在hdfs中,并通过http与reducer共享。这将处理Map和复制阶段。因此,如果您可以想象我们让每个Map器使用框架根据mr分区器指定的相同内存需求。
现在,在合并阶段,reducer从copy阶段调用这个输出,并将其合并到各个阶段。合并是在内存中完成的,典型的应用程序将受益于增加的内存。我们对mr框架中的reducer有更多的控制,因为这个选项是可配置的,并且我们可能想要一个reduce输出(在总排序的情况下),或者仅仅是少于mr为我们确定的Map器的数量,这取决于分区机制是如何设置的。无论哪种方式,我们都将接收(洗牌后)类似于以下内容的输入: (Key, List(Value)) . 这个列表是我们汇总的,也是保持内存高于Map器的另一个原因。

相关问题