我在 Hadoop 2.6.0 中运行了一个字数统计作业,我看到地图输出有几个溢出。
我有以下配置:
mapreduce.task.io.sort.mb = 100
mapreduce.map.sort.spill.percent = 0.80
Run Code Online (Sandbox Code Playgroud)
运行作业后,Map 输出字节数 = 222660096。通过查看下面的容器日志,缓冲区大小似乎接近 31055173 字节而不是 100MB。
在第一个溢出到磁盘之前查看参数值
bufstart = 0; bufend = 31055173; bufvoid = 104857600
并将 Map 输出(以字节为单位)除以 bufend(222660096/31055173 = 7.17(= 8 次溢出))。
为什么会这样?缓冲区大小应该是 80MB(软限制),所以我认为我应该只有 3 次溢出。另外,任何人都可以对bufstart,bufend和bufvoid?
2016-03-04 20:38:16,678 INFO [main] org.apache.hadoop.mapred.MapTask: Processing split: hdfs://hmaster:9000/input/Input-128M:0+134217728
2016-03-04 20:38:16,842 INFO [main] org.apache.hadoop.mapred.MapTask (EQUATOR) 0 kvi 26214396(104857584)
2016-03-04 20:38:16,842 INFO [main] org.apache.hadoop.mapred.MapTask: mapreduce.task.io.sort.mb: 100
2016-03-04 20:38:16,842 INFO [main] org.apache.hadoop.mapred.MapTask: soft limit at 83886080
2016-03-04 …Run Code Online (Sandbox Code Playgroud)