简介

MapReduce是一种编程模型,在真正应用于工作上时,它分为MapTask阶段和ReduceTask阶段,用于大规模数据集(大于1TB)的并行运算。概念"Map(射)“和"Reduce(约)”,是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

流程图与过程详解

MapTask阶段
MapReduce数据处理的全过程(图文讲解)

  1. 既然需要进行数据处理,自然需要我们提供数据,那么首先我们需要提供待处理的文件,可以是一个也可以是多个

  2. 在我们(客户端)提交(submit())数据前,客户端会获取数据的信息,根据参数配置,形成任务分配的规划,即计划切片数(默认一个切片大小128M,hadoop老版本是64M)
    注:虽然切片的大小是按照128M为一个分界线,但是如果有两个文件需要被切片,那么不论第二的文件多小,都独占一个切片,不需要跟在第一个文件最后一个切片的末尾,如图
    MapReduce数据处理的全过程(图文讲解)

  3. 然后需要提交切片信息,包含job.split(切片)、wc.jar(本地模式无需提交,集群下需要)、job.xml(配置信息),这些信息

  4. 接着Yarn会调用RM(ResourceManager)会创建MrAppmaster(job资源的老大)、NodeManager。其中MrAppmaster会根据split(分片)决定启动MapTask的数量。

  5. 开始读取数据,调用InputFormat这个接口去读取,其中默认情况下是采用InputFormat下的TextInputFormat这个具体实现类进行的,特点是每次读取文本数据,是一行一行的去读,当然我们也可以重写TextInputFormat内部的RecordReader()方法,按整个文件去读,看你的需求。

  6. 根据RecordReader()方法,每次读取一行则产生一个<k,v>键值对,k是每行起始位置的偏移量,v是这一行的内容:(注意每行结尾的换行符也占一个偏移量)
    MapReduce数据处理的全过程(图文讲解)

  7. 得到全部行的<k,v>后,将结果返回给Mapper,接下来进行业务逻辑的处理:把每行转化为string、进行切割、封装,再由context.write(k,v)进行写出

  8. context.write(k,v)写出的数据会先传给OutPutCollector(收集器),在由收集器写到环形缓冲区内(默认大小100M),环形缓冲区内部顺时针写数据,逆时针写对应的数据的索引,并且每次写到整个缓冲区的80%容量时,会进行一次溢写,即把内存里的数据写到磁盘上,之后反向写数据和索引(红色剪头所示),继续接受收集器传来的信息(注:环形缓冲区并不是物理上的环形,而是逻辑上的,它本身是一个队列,数据和索引接头处默认有个分界线)
    MapReduce数据处理的全过程(图文讲解)

  9. 环形缓冲区索引中的partiton就是对应数据被划分的分区,每个分区在内部进行对数据排序,按照字典顺序的规则,排序方式采用快速排序(为什么不合并分区再排序,而是各个分区排序? 因为每个分区是由对应的Reduce进行下一步的处理,现在合并没有意义)由环形缓冲区写到磁盘上的这一过程,称之为序列化, 之后针对属于同一个MapTask下的相同分区的内部数据进行归并排序。
    MapReduce数据处理的全过程(图文讲解)
    Reduce阶段

  10. 在所有的MapTask完成以后,由MrAppMaster启动相应数量的ReduceTask,并告知ReduceTask需要处理的数据范围:例如所有分区0的由ReduceTask1处理,分区1的由ReduceTask2处理

MapReduce数据处理的全过程(图文讲解)
11. 属于同一个ReduceTask下的数据,会进行文件合并,进行归并排序
12. 合并后的数据会根据key值相同的进入到Reducer中,写入到context.write(k,v),最后通过outputformat(默认是TextOutPutFormat)的RecordWriter写出到一个part里:如下图,<a,1>、<a,1>会先进入Reducer,之后轮到<c,1>
MapReduce数据处理的全过程(图文讲解)

Shuffle流程

定义
简洁的说就是map方法之后,reduce方法之前的数据处理的过程,又称为洗牌。shuffle包含了对数据的分区、排序、combiner、归并、压缩等过程
MapReduce数据处理的全过程(图文讲解)

相关文章: