MR内部处理数据流程,一看就会,动手就?

本文详细介绍了Hadoop MapReduce的工作流程,包括客户端如何指定数据读取位置、任务的调度、数据读取与处理、Map阶段的数据分区与排序、Reduce阶段的Shuffle过程以及最终的输出。MapReduce通过LineRecordReader读取数据,Mapper处理数据并生成新的KV对,经过分区和排序后,数据溢出到本地磁盘并进行合并排序。ReduceTask通过fetcher拉取数据,再次进行排序和分组,最后执行Reduce方法输出结果。

 客户端指定map端读取数据位置,map端的并行度由客户端对文件的逻辑切片决定的.(文件大小,文件数量)
将maptask,reducetask提交给资源调度系统,资源调度系统将任务分配给虚拟机.

通过FileInputFormat的实现类TextInputFormat类的LineRecordReader方法来读取数据(以KV的形式).
map方法在执行时是在一个循环中(Mapper类的方法中的循环)
每读取到一组KV,map执行一次.处理数据KV,生成新的KV,并通过context将数据写出.
数据被MapOutputBuffer类的collect方法收集起来,经过HashPartition类的getPartitioner方法,获取到一个分区编号,返回给collect.
(new key,new value,int partioner)
新数据写到环形缓冲区(数组),只会写到80%,并且根据分区编号,进行区内排序(字典顺序排序),写到80%后,数据就会通过溢出器,将这些数据溢出到本地磁盘.
磁盘上的数据经过Merger组件将相同区的数据进行合并排序(数据依旧在本地磁盘)
数据在本地,外界不好拿取,这里会提供javaWebHttp的下载服务
reduceTask通过这个服务将属于当前分区的数据通过fetcher这个组件拉取(shuffle)过来.
拉取过来后,会经过merger组件将数据进行合并排序.
在经过GroupingConmparetor组件分组,相同key,value被放到迭代器中.
执行reduce方法,输出结果(TextOutputFormat指定输出路径).

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值