分享
hadoop 性能调优,减少map端的spill, 增大io.sort.mb,但是我怎么知道到底有没有减少spill的次数,在哪里查看呢?

已有(2)人评论

跳转到指定楼层
sstutu 发表于 2018-8-31 13:49:52
这个恐怕看不到,因为map输出中间结果,都被会reduce处理,而且假如只有map,这个应该也是临时的存储。用了后会释放。
当然如果你真想看,那就去读读源码把,看看会放在什么位置,什么时候放,放多少。这个不一定你看就会有的。

相关资料,可参考下面
这个内存缓冲区是有大小限制的,默认是100MB。当map task的输出结果很多时,就可能会撑爆内存,所以需要在一定条件下将缓冲区中的数据临时写入磁盘,然后重新利用这块缓冲区。这个从内存往磁盘写数据的过程被称为Spill,中文可译为溢写,字面意思很直观。这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程。溢写线程启动时不应该阻止map的结果输出,所以整个缓冲区有个溢写的比例spill.percent。这个比例默认是0.8,也就是当缓冲区的数据已经达到阈值(buffer size * spill percent = 100MB * 0.8 = 80MB),溢写线程启动,锁定这80MB的内存,执行溢写过程。Map task的输出结果还可以往剩下的20MB内存中写,互不影响。


回复

使用道具 举报

fengshuangme 发表于 2018-9-3 14:46:29
sstutu 发表于 2018-8-31 13:49
这个恐怕看不到,因为map输出中间结果,都被会reduce处理,而且假如只有map,这个应该也是临时的存储。用了 ...

感谢回复,又查找了一些资料,在Jobhistory 的web 页面,可以查看maptask 的log, 如下图可以看到spill两次







Capture.PNG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条