为什么从Hadoop 1.x开始删除了io.sort.record.percent
属性?
答案 0 :(得分:3)
它在2.x中,但唯一的区别是它的名字已经改变了:
mapreduce.task.io.sort.mb :排序文件时使用的缓冲区内存总量,以兆字节为单位。默认情况下,为每个合并流提供1MB,这应该最小化搜索。
默认值仍为100 MB。请在this link上找到更多信息。
答案 1 :(得分:1)
io.sort.record.percent 是适用于 io.sort.mb (旧名称)的百分比。
映射输出数据放在内存缓冲区中。当缓冲区填满时,框架会对其进行排序,然后溢出到磁盘。一个单独的线程将已排序的磁盘文件合并为一个更大的已排序文件。缓冲区由两部分组成:一个带有连续原始输出数据的部分和一个元数据部分,它将每条记录的指针保存到原始数据部分。在MR1中,这些部分的大小是固定的,由 io.sort.record.percent 控制,它表示io.sort.mb空间的百分比用于元数据部分。这意味着,如果没有对此参数进行适当调整,如果作业有许多小记录,则元数据部分的填充速度可能比原始数据部分快得多。缓冲区在完全填满之前会溢出到磁盘。这会影响性能。
MAPREDUCE-64通过允许两个部分共享相同的空间并且大小不同来解决MR2中的此问题。因此,不再需要io.sort.record.percent来最小化MR2中的溢出次数。这就是为什么这个属性已被删除