gpt4 book ai didi

hadoop - 在Hadoop 2中控制reducer shuffle合并内存

转载 作者:行者123 更新时间:2023-12-02 21:35:26 25 4
gpt4 key购买 nike

我想了解在MapReduce作业的缩减阶段如何使用内存,因此我可以以指定的方式控制设置。

如果我理解正确,那么reducer首先获取的映射输出,并将其保留在内存中达到一定阈值。用于控制此设置是:

  • mapreduce.reduce.shuffle.merge.percent:初始化内存合并的使用阈值,表示为分配给存储内存映射输出的总内存的百分比,由mapreduce.reduce.shuffle.input.buffer.percent定义。
  • mapreduce.reduce.input.buffer.percent:在缩减期间保留映射输出的内存百分比(相对于最大堆大小)。随机播放结束后,内存中任何剩余的映射输出所消耗的内存必须小于此阈值,然后才能开始减少。

  • 接下来,这些溢出的块是 合并的。似乎以下选项控制用于随机播放的内存量:
  • mapreduce.reduce.shuffle.input.buffer.percent:随机播放期间从最大堆大小分配到存储映射输出的内存百分比。

  • 但是,这里有一个设置:
  • mapreduce.reduce.shuffle.memory.limit.percent:单个随机播放可以消耗的内存限制的最大百分比。

  • 但尚不清楚该百分比适用于什么值。 是否提供有关这些值的更多信息,即它们控制什么以及它们之间的区别?

    最后,合并完成后,对输入执行缩减过程。在[Hadoop书籍] [1]中,我发现最后的合并步骤直接将数据输入到reducer。但是,mapreduce.reduce.input.buffer.percent = 0的默认值与此矛盾,表明在 reducer 启动之前,所有内容都已溢出到磁盘。 是否有关于以下解释之一正确的引用?

    [1]:Hadoop,权威指南,第四版,p。 200

    最佳答案

    这是mapreduce.reduce.shuffle.memory.limit.percent的使用方式,其百分比表示整个reducer内存的0.70%。那就是单个shuffle 可以将数据保留在内存中的最大字节数。

    maxSingleShuffleLimit = (long)(maxSize * MAX_SINGLE_SHUFFLE_SEGMENT_FRACTION);
    //MAX_SINGLE_SHUFFLE_SEGMENT_FRACTION=mapreduce.reduce.shuffle.memory.limit.percent(0.25 f)
    maxSize = (int)(conf.getInt("mapred.job.reduce.total.mem.bytes",(int)Math.min(Runtime.getRuntime().maxMemory(), Integer.MAX_VALUE))* maxInMemCopyUse);//maxInMemCopyuse(mapred.job.shuffle.input.buffer.percent - 0.70f)

    该属性用于化简版的复制阶段。如果所需的映射输出大于maxShufflelimit,则将数据移至磁盘,否则保留在内存中。

    属性 mapreduce.reduce.input.buffer.percent是完全不同的。
    复制所有数据并完成所有合并后,在 reducer 启动之前,它仅检查存储在内存中的数据是否超出此限制。

    关于如何使用maxSingleShuffleLimit和other属性,您可以引用 this代码(但是对于旧的mapred应该可以提供见解)。

    关于hadoop - 在Hadoop 2中控制reducer shuffle合并内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650540/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com