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

标签 java hadoop mapreduce shuffle

我只是想验证我对这些参数及其关系的理解,如果我错了请通知我。

  • mapreduce.reduce.shuffle.input.buffer.percent 告诉分配给 reducer 的整个洗牌阶段的内存总量。

  • mapreduce.reduce.shuffle.memory.limit.percent 告诉单个 shuffle 可以从 mapreduce.reduce.shuffle.input 消耗的内存限制的最大百分比.buffer.percent.

  • mapreduce.reduce.shuffle.merge.percent 是启动内存中合并的使用阈值,表示为总内存的百分比(mapreduce .reduce.shuffle.input.buffer.percent) 分配用于存储内存映射输出。

  • 但是 Hadoop-2.6 有一个限制,即 mapreduce.reduce.shuffle.merge.percent 应该大于 mapreduce.reduce.shuffle。内存.limit.percent。这意味着单个洗牌具有相同类型的所有键,否则此限制的目的是什么,这三者之间的关系是什么?

最佳答案

我想分享一下我对这些属性的理解,希望对您有所帮助。如果有任何问题,请告诉我。

mapreduce.reduce.shuffle.input.buffer.percent 说明要分配给循环缓冲区的 reducer 堆内存的百分比,用于存储从多个映射器复制的中间输出。

mapreduce.reduce.shuffle.memory.limit.percent 说明单个洗牌(从单个 Map 任务复制的输出)应该占用的上述内存缓冲区的最大百分比。超过此大小的 shuffle 不会复制到内存缓冲区,而是直接写入 reducer 的磁盘。

mapreduce.reduce.shuffle.merge.percent 说明内存合并线程将运行以将内存缓冲区上的可用洗牌内容合并到单个文件中并立即运行的阈值百分比将合并后的文件溢出到磁盘中。

很明显,内存合并线程应该要求内存缓冲区中至少有 2 个 shuffle 文件才能启动合并。所以在任何时候 mapreduce.reduce.shuffle.merge.percent 都应该高于内存中由 mapreduce.reduce.shuffle.memory.limit.percent 控制的任何单个洗牌文件> 属性,它规定在合并过程的缓冲区中至少应该有一个以上的洗牌文件。

关于java - mapreduce.reduce.shuffle.memory.limit.percent、mapreduce.reduce.shuffle.input.buffer.percent 和 mapreduce.reduce.shuffle.merge.percent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874766/

相关文章:

hadoop - 如何使用 PIG 在 Hadoop 中给定阈值进行连接

hadoop - -Dmapred.job.name不适用于s3-dist-cp命令

java - 使用 MapReduce Java 解析文件

java - 如何扩展Springboot logback配置? (default.xml 显然不可用)

hadoop - HFile 创建 - 添加了一个在词法上不大于先前键的键

java - 快速重新着色位图

hadoop - JobTracker源代码修改

hadoop - 当 reducer 仍在运行时,我可以读取 reducer 输出吗?

java - 正则表达式按分隔符分割,排除转义符并保留空字符串

java - jar 文件可以在 eclipse 文件夹中使用,但不能在其中使用。未找到主类