MapReduce可以说是分布式计算的鼻祖,虽然在技术的发展迭代当中,MapReduce很大程度上被Spark计算引擎所替代,但是了解MapReduce的底层逻辑,对于我们学习分布式仍然有重要的指导意义。今天的大数据开发学习分享,我们就来讲讲MapReduce基本组件。
 

mapreduce体系架构 mapreduce的架构分为四个组件_大数据

MapReduce核心模块

Mapper模块:处理输入的数据,业务逻辑在map()方法中完成,输出的数据也是KV格式;

Reducer模块:处理Map程序输出的KV数据,业务逻辑在reduce()方法中;

Driver模块:将程序提交到Yarn进行调度,提交封装了运行参数的job对象。

MapReduce运行流程

如果从比较简略的角度来说,MapReduce运行分为4个步骤:

Input:从HDFS中读取文件,数据读取组件是TextInputFormat和LineRecordReader。

Mapper:根据Input步骤读取过来的数据,进行数据映射。之后进行混洗,混洗主要进行分区、排序和合并。

Reduce:混洗好的数据交给Reduce步骤进行计算。

Output:Reduce计算好的数据经过TextOutputFormat和LineRecordQriter组件,输出到对应OutPutPath中。

而从更加具体详细的数据处理流程来说,完成MapReduce操作,需要有7个角色参与,可以分为4个大阶段,7个小阶段。分别是:

1、任务启动阶段

1.1、由Client端发起请求;

1.2、YarnRunner接受请求并申请资源;

1.3、ResourceManager检索资源情况,分配资源路径给YarnRunner;

1.4、YarnRunner进行分片,申请启动MRAppMaster

1.5、ResourceManager根据分片和job等信息,选择数据所在节点启动MapTask(程序找数据),唤醒MRAppMaster

1.6、MRAppMaster启动,持续监控和管理任务

1.7、MapTask启动,开始干活

2、Map阶段

2.1数据读取,每个task读取自己节点上的数据。

2.2数据处理

2.2.1每个task对自己读取到的数据进行split,分成更小的数据块

2.2.2对每个split的数据进行map,提取key、value、con

2.2.3对数据进行分区,有条件建议自定义分区,可以解决数据倾斜的问题,对之后的reduce也有极大的优化

2.2.4数据进入环形缓冲区,以起始点为赤道,到达溢出比后,刷新赤道

2.2.5溢出的数据刷入sort进行排序

2.2.6排序好的数据放入spill,进行merge后有序写入hdfs

2.3shuffle阶段

广义shuffle阶段从map之后就开始,到调用reduce函数结束。这里只是将hdfs的数据刷入reduce的缓存区域。

3、Reduce阶段

3.1Reduce启动

3.1.1MRAppMaster监控到redeuce任务即将结束,开始申请启动ReduceTask;RM接受申请,根据分区结果,启动若干ReduceTask

3.1.2ReduceTask启动,把每个map结果中的不同分区的数据,shuffle数据到对应Reducetask所在节点的缓存

3.2数据处理

3.2.1在缓存中对每个sort进行merge(内存、缓存都有)

3.2.2将merge后的结果,重新进行spill,排序后,落到hdfs

3.2.3将所有小文件merge成一个大文件

3.4Reduce阶段

3.4.1调用Reduce函数,对排序好的file进行汇总

3.4.2将最终结果写入到hdfs中

4、任务结束阶段

4.1MRAppMaster监控到每个Reduce节点的执行情况

4.2向上汇报,并申请注销自己

4.3RM注销MRAppMaster,并向上汇报

4.4YarnRunner返回任务执行完成信息

4.5客户端接受信息,任务结束

关于大数据开发学习,MapReduce基本组件,以上就为大家做了简单的介绍了。MapReduce在大数据计算处理上,还是非常具备典型性的,搞懂底层逻辑,对于后续的运行和优化也有指导作用。