大数据笔记之-MapReduce内部原理

大数据笔记之MapReduce的底层原理

Map段工作逻辑:

两个线程:
第一个线程:
使用RecordReader读取文件。
使用用户自定义的map对数据进行处理,然后写入环形缓冲区。

第二个线程: 检查环形缓冲区的是否填满(80%)
(1)如果填满,先上锁阻塞线程一,再开始执行溢出逻辑 ->
溢出逻辑为:
1.先对缓冲区中的数据(数组)按照 分区号和key(分区号对应的key的逻辑可以自定义) 进行排序。
2.依次将缓冲区中的kv写出到一个本地磁盘文件中。
3.溢出完成后,清空本次的数据。
4.释放环形缓冲区的锁,将线程一改为就绪状态。
(2)当reader再也读不到数据时,将历次溢出的文件进行合并(合并规则:先读取各个文件的partition0数据,使用归并排序,写入合并文件的最前面,再读取partition0--------略)

在这里插入图片描述
补充知识 :
***每个写入硬盘的文件都会带一个索引文件。这个索引文件里面保存着每个分区在partition(n)中的位置.
***环形缓冲区在溢写数据的时候,其中可手动添加combine的逻辑。
***当全部文件处理完毕后,最后阶段对所有溢写文件进行结合的时候。也会调用这个combine的逻辑,对相应的分区所对应的数据进行结合。

Reduce工作逻辑:

Reduce端的机器会去各个不同map端的机器上去下载map端处理好的临时文件。所有文件下载好后,会有一个小聚合,将所有文件进行合并。这个时候,如果有自定义的combine的逻辑,会按照自定义的逻辑对局部数据进行一个小聚合。然后使用归并排序生成一个文件(存于本地磁盘的文件)。
这个文件之后的操作:
注意,这个文件的key都是有序的。

ReduceTask会先生成一个迭代器,这个迭代器的hasnext()方法判断逻辑是:
GroupingComparator比较器(可以先理解为:当前行的key和下一行的key是否相同)。
备注:这个比较器的作用是拆分不同迭代器的,可以自己定义区分逻辑。。。
这个迭代器的next()会将当前行的数据返回。

ReduceTask会先调用自定义的reduce()方法。方法中自动传递一个迭代器。同一个key的数据生成一个迭代器。ReduceTask每次调用一个迭代器,直到所有的key对应的迭代器全部被调用完毕。

Reduce()方法里当同一个key的迭代器调用结束后,随之reduce()方法就会结束。
迭代器总结:也就是说,在一个reduceTask上,不同key的数据生成不同的迭代器,然后按照顺序依次调用reduce()方法,每个reduce方法对应一个key的迭代器,直到所有key的迭代器全部被调用完。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值