溢出过程什么时候停止?

时间:2015-08-26 10:59:44

标签: hadoop mapreduce yarn

映射器输出临时存储在循环缓冲区(内存中)中。默认缓冲区大小为100 Mb。当缓冲区填满80%时,将开始溢出过程。 (http://grepalex.com/2012/09/24/map-partition-sort-spill/) 什么时候溢出(到一次泄漏)停止/完成? 在创建固定大小的溢出后它会停止吗?

2 个答案:

答案 0 :(得分:1)

好问题。让我试着一步一步解释。

  1. 地图会将其输出(使用Mapper.Context.write())写入循环内存缓冲区(MapTask.MapOutputBuffer)。
  2. 当缓冲区超过默认阈值限制80%时,缓冲区中的所有数据都将溢出到磁盘。
  3. 因此,假设mapreduce.task.io.sort.mb设置为100 MB,mapreduce.map.sort.spill.percent设置为0.8。
  4. 现在,当缓冲区中的数据变为85 MB(超过80%)时,所有85 MB将溢出到单个分割文件。
  5. 多个线程用于将数据溢出到磁盘。
  6. Spilling在一个单独的线程中工作,允许映射器在溢出发生时继续运行并处理输入数据。
  7. 因此,循环缓冲区超过其大小80%的情况将再次发生,并将创建一个新的溢出文件。
  8. 参考链接: Link 1 Link 2

答案 1 :(得分:0)

这里溢出意味着它溢出到本地磁盘(而不是hdfs),reducer会把它拿起来。溢出以循环方式写入mapred.local.dir属性指定的目录。当所有地图输出都写入磁盘时,溢出将停止。