mapreduce的内部核心工作机制Shuffle-maptask生成的数据传输给reducetask的过程(fifteen day)

seven day second 学习了MapReduce的整体工作机制https://blog.csdn.net/ZJX103RLF/article/details/88965770

经过做了几个mapreduce练习,今儿再看看内部的核心工作机制(先学难的再回顾基础):

 

首先mapreduce是个分布式的,它的第一个工作进程叫maptask(真正的进程名字叫yarn child-->运行的逻辑叫maptask/reducetask),了解工作机制,主要是看yarn child是怎么工作的,yarn child的启动不是yarn,yarn只是提供一个容器,是由job客户端起的MRAPPMaster(在nodemanager提供的容器中起来的),MRAPPMaster再去起maptask,  maptask起来以后,会和MRAPPMaster之间保持监控,(如果监控到maptask挂了以后再起一个),接下来maptask产生数据以后,MRAPPMaster会启动若干的reducetask,这个就是整个的流程。

接下来分别了解一下map的yarn child和reduce的yarn child 起来以后是怎么工作的

map:首先对要处理的文件划分任务,划分输入切片:Job客户端负责划分:扫描输入目录中的所有文件,遍历每一个文件,按照128M规格划分范围,最后得到一个ArrayList,再把这个Arraylist序列化成一个文件,就得到了job.split文件。

maptask调TextInputFormat(FIleInputFormat的子类) 方法去读产生的切片文件,得到一个LineRecordReader,然后调里面的next()方法,每调一次LineRecordReader去读一行数据,把那行数据作为value,把那行的起始偏移量作为key,再把它交给返回值maptask,拿到key,value去调自己写的 例:WorldCountMapper,把得到的<key,value>传到方法里,然后每调一次next()都会得到context.write(key,value), 接下来会有一个MapOutputCollector类接收,把收集好的数据缓存起来(环形缓冲区,默认100M),当缓存到整个缓存区的80%时,会有一个spiller线程对缓存里面的数据分区排序(Partitioner/compaerTo),分区排序完成以后会把文件写到本地磁盘,并且MapOutputCollector会一直给缓冲区写数据,将上次排序溢出到本地的数据覆盖掉,这样就会产生好多溢出文件,而且这些文件区号小的在前面,同区中按key有序,生成这些小文件以后,会调Merge工具把这些小文件合并,合并以后也是分区且有序,同时会生成一个分区索引文件,这个文件会指明数据是从哪个偏移量到哪个偏移量,至此maptask工作已经完成。附图(借的):

maptask完事以后,会把生成的文件纳入NodeManager的web程序document目录中,reducetask去web程序中http下载自己要的那块文件(搁每一个maptask产生的文件中找自己要的,例:0reducetask找0号区数据)有几个maptask得到几个文件。得到的文件再合并排序变成一个文件,例:0号文件。得到的文件调自己写的WorldCountReduce方法(reduce[key,迭代器,context]),每调一次迭代器,就会迭代文件最开始的值,生成一个临时变量的key和value,一直迭代期间,有一个分组迭代器GroupingComparator进行分组,判断key是否一样,一样迭代,不一样就结束,下一组继续,每一组处理完之后聚合context.write(key,value)拿到数据,再传递到一个工具类TextOutputFormat里的方法(getRecordWriter()),通过该方法拿到一个LineRecordWriter对象,就是说context.write(key,value)拿到数据会反复传给write(k,v)方法,最后写成一个文件,传到HDFS上

part-r-00000 --> key \t value 附图(借的):

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值