MapReduce源码分析

mapreduce计算流程:

  • 首先将block块切片,每个切片对应一个任务.
    切片的目的是将block数量和map任务数量解耦.
  • map读取切片数据,默认按行读取,作为键值对交给map方法,其中key是当前读取的行在文件中的字节偏移量,value就是读取的当前行.
  • map开始计算,自定义的逻辑
  • map将输出的kv首先写道环形缓冲区,在写之前计算分区号(默认按照key得hash值对reduce的个数取模)
  • 环形缓冲区默认100MB,阈值80%,如果写入得kv对达到了80%则发生溢写,溢写到磁盘,如果溢写的文件数量达到了3个,则发生map端归并操作,此时如果指定了combiner,则按照combiner压缩数据.
  • 当一个map任务完成之后,所有得reduce向其发生http get请求,下载他们所属的分区数据,此过程称为shuffle,洗牌.
  • 当所有map任务运行结束,开始reduce任务
  • 在reduce任务开始之前,如果有时间则进行shuffle文件的归并并落磁盘,如果没有时间,则直接归并按组发送给reduce方法,reduce迭代计算
  • reduce计算结束后将结果写道HDFS.

作业提交流程

1.客户端向RM取号
2.客户端检查作业输入输出,计算切片,解析配置信息
3.客户端将jar包\配置信息以及切片信息上传到HDFS
4.客户端向RM发送提交作业的请求
5.RM调度一个NM,在NM上的一个容器中运行MRAppMaster,一个作业对应一个MRAppMaster
6.MRAppMaster首先获取HDFS中的作业信息,计算出当前作业需要多少个map任务,多少个reduce任务.
7.MRAppMaster(AM)向RM为map任务申请容器,AM跟NM通信把容器启动起来,运行map任务,容器中的YarnChild会首先本地化conf,切片信息以及jar包
8.当map任务完成达到5%的时候,AM向RM为reduce任务申请容器
9.当MR中最后一个任务运行结束,AM向客户端发送作业完成信息.MR的中间数据销毁,容器销毁,计算结果存档到历史服务器

配置信息默认值来源

  • MRJobConf接口
  • -default.xml文件
  • 用户的设置:程序设置和xxx-sit.xml设置
    在这里插入图片描述
发布了262 篇原创文章 · 获赞 491 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/qq_42859864/article/details/104523748