MapRduce-单词统计的执行流程

分配资源阶段

  1. 发起一个提交作业的请求,到达resourcemanager
  2. nodemanager想resourcemanager汇报自己的状态(带宽,内存,cpu...)
  3. 客户端进行规划,在job.xml中,进行切片。
  4. resourcemanager 管理很多的nodemanager 为其分配资源(带宽,内存,cpu...)
  5. 分配完资源之后,客户端与nodemanager打交道,把自己的jar包、切片 分发给nodemangaer,datamanager就有了客户端的数据。
  6. 客户端就知道运行多少个maptask ,有多少个切片就有多少个maptask ,多少个切片也就是多少个block的数量。(1个线程池执行一个maptask),多少个block就有多少个MapReduce,多少个task就有多少个分区。
  7. 看数据在那个分区中进行计算,通过单词的hash值/分区的个数,来判断该数据在那个分区中计算

Map阶段

  1. 对数据进行分区,并分别对每个分区进行map映射(map<data,1>) 
  2. 对分区的map进行排序

Map->Reduce阶段(shuffle洗牌过程)

        这个阶段是效率最慢的,需要通过网络拉取将各个datanode分区中的数据,分别对应到相应的reduce中。这就是mapreduce慢的原因。

Reduce阶段

  1. 将reduce中的数据进行排序
  2. 对map中的key进行分组 (map<data,[1,1,1,1]>)
  3. 调用自己的方法,Reduce.reduce(Text,Iterable<IntWritable>) (map<data,4>)

输出阶段

调用TextOutPutFormat,将输出结果写到hdfs中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值