MapReduce原理及运行流程回顾

来源:互联网 发布:英国海军实力知乎 编辑:程序博客网 时间:2024/06/05 20:56

原理



1、对数据进行Split分片,把数据分为512M或者1G每片;

2、每一个数据分片起一个线程对其进行Map操作,将数据转化成Key-Value对;(每个线程相互独立,线程之间无需通信,可以并行操作)

3、Shuffle将hash值相同的Key放到一个桶里面;

4、再起一个线程对每个桶里面Hash值相同的Value进行Reduce(规约)操作;


截一张PPT,能够很好地讲清楚MapReduce的过程:




数据从HDFS上来,InputFormat进行数据切片,Map操作形成Key-value对,Partitioner按照Hash值将数据放到不同的分片中,将数据写到本地磁盘。Shuffle完成数据远程拷贝,将存在各节点的Hash值相同的分片数据拉取到一个Reduce Task中,然后进行Sort排序实现分组,最后进行Reduce操作进行规约,将结果写回到HDFS上。


PS:Combiner可以看做local reducer,数据在本地先规约。有些可用Sum( ),有些不能Average( )。

Partitoner默认实现Hash取模,hash(key) mod R ,默认RReduce Task数。


一、MapReduce将整个运行过程分为两个阶段:Map阶段和Reduce阶段(红色是用户可编写

1、Map阶段由一定数量的Map Task组成

输入数据格式解析:InputFormat(默认TextInputFormat 

输入数据处理:Mapper

数据分组:Partitioner

2、Reduce阶段由一定数量的Reduce Task组成

数据远程拷贝

数据按照key排序

数据处理:Reducer

数据输出格式:OutputFormat(默认TextOutputFormat 


二、MapReduce编程模型的物理结构:




运行流程




1、Client将应用程序提交到ResourceManager上;

2、Yarn负责资源管理,RM会寻找到对应的NM;

3、NM会将MR AppMaster启动起来;

4、MR AppMaster知道需要启动多少个MapTask、ReduceTask,这时候会向RM申请资源。RM会将资源的分配告诉给MR AppMaster;

5、MR AppMaster和申请分配资源对应的NM进行通信,要求启动相应的MapTask和ReduceTask

6、各个NM就会启动相应的MapTask和ReduceTask完成任务。

0 0