mapreduce整体流程

源码跟踪...

jobTracker在哪里运行?

taskTracker在哪里运行?

TaskTracker如何周期性的向JobTracker发送心跳?以什么方式?(线程?线程如何停止?如何回收?)

map在哪里运行?

map之前进行切割分片,每个切割分片开启一个map任务?

环形缓冲区如何分区,分区是在哪里运行的?分区是哪里控制的?代码在哪里?

分区的时候的排序是如何进行的?

map端和reduce端运行的会不会运行在同一台机器上?

MR框架是如何对key进行排序的?源码跟踪...

reduce端如何从map端复制数据?复制数据的时候有没有排序?合并数据的时候排序是怎么控制的?由哪块代码控制?

reduce数目如何确定?由谁确定?

reduce在哪里运行?

下面是MapReduce的流程,(纯语言描述,不直观,后面有空再补上图片吧)

1、对读取的文本进行split ,每个split格式是<K,V>对,K是行偏移量,V是行的整条字符串,每个split启动一个maper task, maper任务可能在集群中不同的机器上执行。

2、maper任务在对输入<K,V>对的V进行分割,形成新的<K,V>对,

3、maper任务输出的<K,V>对,先放入环形缓存区里面(大小是100M,可配置),如果达到80%,则溢写到本地磁盘,

4、在溢写的过程中,会放生 partition,sort,combine操作。

5、partition操作就是对不同的数据按需进行分割开,(比如有两种数据,一种是手机号,一种是非手机号,可以分为两个分区,手机号的数据丢在一个文件,非手机号则丢在一个文件)

6、sort就是排序,写入磁盘的时候,按一定的秩序进行写入

7、combine就是将相同的K的V进行相加,从而对数据做到压缩的效果,这样通过网络copy到reduce task的服务器上时,减少网络带宽的使用,提高效率

8、从不同机器上copy文件到reduce task机器,一开始先写在缓存中,达到80%则溢写(这个和maper端的溢写类似)

当然溢写的过程中又可以进行一次 partition,sort,combine

9、这里可能有人会疑问,maper端不是分区,排序和合并了嘛?为啥到reduce端还要再进行一次呢?

原因很简答,我们知道每个split分发给maper task,而mapper task任务是在不同的机器上执行的,每个maper端的分区,排序,合并只是对单台机器上的数据进行的,而reduce端是从不同的机器copy数据到reduce task服务器上,来自不同机器上的数据可能还存在K相同的数据,所以reduce端还要进行分区,排序,合并,并且reduce端是对所有数据进行分区,排序,合并,reduce端的分区排序合并也叫做merge

10、数据准备好后,数据会输入到reduce task,统一将不同分区的数据进行V的count也就是相同K的<K,V>,V要进行累加,最终输出结果到hdfs上




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值