学习mapreduce有感 日记1

mapreduce是一个高性能并行计算的计算平台,可部署在廉价的集群上

它将计算分成了map,shuffle,reduce阶段,可以通过接口对map,reduce过程进行编程

map:

hdfs中一个文件过大的话会被inputformat方法分成几个小块,然后分发给mapper(数量自己可以设置),mapper将接收的数据转换成键值对形式(key,value)输出,然后输出的内容会进入环形缓冲区

map shuffle:

经过partion处理后进入缓冲区

 partion:对key的hash值取reducer数量的模。模值就是分区值

环形缓冲区是一个循环的数组,储存map输出的键值对和储存索引数据(四元组——(value起点位置,key起点位置,partion的值,value的长度))

每进入一个键值对,bufindex指针增长8,kvindex指针前进4个位置

当缓冲区数据达到指定阀值(一般为80%),会进行sortandsipll进程

sort:

对缓冲区的索引数据先按分区值排序,然后再分区内按key值排序

spill:

在本地磁盘空余的空间生成一个spill0.out文件,将缓冲区的数据写进去

同时也会有对应的spill0.index文件储存spill0.out文件里每个不同partion值的起点

在进行spill之后,缓冲区的分界点会重新界定——剩余空间的中点位置

最后会有一个merge阶段:

将所有spill.out文件里的相同分区合并,并在分区内排序,最后将结果输入在file.out文件里

对应会有一个file.index文件储存file.out文件里不同partion值的起点

reduce shuffle:

根据分区值,将file.out文件里的键值对分配到对应的redecuer上

map阶段完成时,通知父TaskTracker状态已经更新,TaskTracker进而通知JobTracker(这些通知在心跳机制中进行)。所以,对于指定作业来说,JobTracker能记录Map输出和TaskTracker的映射关系。Reduce会定期向JobTracker获取Map的输出位置,一旦拿到输出位置,Reduce任务就会从此输出对应的TaskTracker上复制输出到本地,而不会等到所有的Map任务结束。

reduce会一边获取map的输出,一边进行排序,最后生成一个有序的键值对,

reduce:

通过调用reduce函数

处理最后的键值对,将结果输入到hdfs里的指定文件里

参考:MapReduce基本原理(详解!)_mapreduce工作原理-CSDN博客

MapReduce核心编程思想和原理(图形化通俗易懂)-腾讯云开发者社区-腾讯云 (tencent.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值