mapreduce.reduce.shuffle.memory.limit.percent、mapreduce.reduce.shuffle.input.buffer.percent和mapreduce.reduce.shuffle.merge.percent

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

我只是想验证我对这些参数及其关系的理解,如果我错了,请通知我。 mapreduce.reduce.shuffle.input.buffer.percent 告诉分配给整个洗牌阶段的内存总量 reducer . mapreduce.reduce.shuffle.memory.limit.percent 告诉一次洗牌可以消耗的内存限制的最大百分比 mapreduce.reduce.shuffle.input.buffer.percent . mapreduce.reduce.shuffle.merge.percent 将启动内存内合并的使用率阈值,表示为占总内存的百分比( mapreduce.reduce.shuffle.input.buffer.percent )分配用于存储内存Map输出。
但是 Hadoop-2.6 有一个限制 mapreduce.reduce.shuffle.merge.percent 应大于 mapreduce.reduce.shuffle.memory.limit.percent . 这意味着一次洗牌有相同类型的所有密钥,否则这个限制的目的是什么,三者之间的关系是什么?

92vpleto

92vpleto1#

我想分享我对这些属性的理解,希望能有所帮助。有什么不对劲就告诉我。 mapreduce.reduce.shuffle.input.buffer.percent 说明要分配给循环缓冲区以存储从多个Map器复制的中间输出的reducer堆内存的百分比。 mapreduce.reduce.shuffle.memory.limit.percent 说明单个随机播放(从单个Map任务复制的输出)应占用的上述内存缓冲区的最大百分比。洗牌的大小超过这个大小将不会被复制到内存缓冲区,而是直接写入到磁盘的减速器。 mapreduce.reduce.shuffle.merge.percent 说明内存中合并线程将在何处运行以将内存缓冲区中可用的无序播放内容合并到单个文件并立即将合并的文件溢出到磁盘中的阈值百分比。
很明显,内存中的合并线程应该至少需要2个随机文件出现在内存缓冲区中才能启动合并。所以在任何时候 mapreduce.reduce.shuffle.merge.percent 应该高于内存中由 mapreduce.reduce.shuffle.memory.limit.percent 属性,根据该属性,它要求合并进程的缓冲区中至少应有一个以上的洗牌文件。

相关问题