Hadoop原理之环形缓存区运行机制

环形缓存区是mapreduce中map阶段处理和存储数据的后半段过程,主要负责处理map()方法输出的kv数据
其内部工作原理如下图

1.环形缓存区的本质是一个缓存数组,即byte[] kvbuff,默认大小为100M

2.最初时,equator在数组最前端,可以将数组想象为环形,首尾相接

3.然后此时equator就既在数组开头,又在数组末尾

4.此时kv数据传进来之后,equator会将kv数据向右进行存储,同时,equator会将此kv对应的元数据向左存储

5.元数据的大小为4字节,存储的分别是(keyStart,valueStart,value length,partition)

6.buffindex指针指向的是最新输入的一个kv数据的末尾位置,随着kv数据的输入,buffindex逐渐向右推移

7.kvindex指针指向的是元数据的末尾位置,随着元数据的增加,kvindex逐步向左推移

8.当kv数据与元数据的大小达到整个数据大小的80%后,此时equator通过setEquator方法计算出一个具体的值,将equator移动到剩余的20%的空间的某个位置

9.此时已经到达80%,缓存区内的数据开始溢出,此时若继续存入数据,kv会从新的equator位置向右存储,元数据会从新的equator位置向左存储

这时又分为两种情况:

9.1:若溢出还没完成,剩余20%的空间已经被填满,此时就会发生阻塞,阻止kv数据继续进入缓存数组,必须等到溢出完成,阻塞锁才会释放,此时原来的数据会被清除,数据即可再次存入

9.2:若溢出已经完成,剩余20%的空间还未存满,此时会将原本的数据清除,数据继续从新equator的位置开始存储

10.直到文件中的数据被全部读取完,此过程则会停止,否则会一直循环执行

 

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值