MapReduce工作原理

MapReduce的工作流程包括Map Task和Reduce Task的多个阶段。Map阶段涉及Read、Map、Collect和Spill,数据经过RecordReader解析,map()函数处理,环形缓冲区排序,最后溢写到本地磁盘。Combine阶段对临时文件合并。Reduce阶段则包含Copy、Merge、Sort和Reduce,数据被远程拷贝,合并,排序,最后reduce()函数将结果写入HDFS。Combiner用于减少网络传输数据量。

在这里插入图片描述
MapReduce工作原理话术
Map Task整体计算流程
(1)Read阶段:Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value(主要是读数据,一行一行的读取数据)
(2)Map阶段:(主要是计算出Maptask的数量,然后把数据以k,v的形式输出到环形缓冲区当中)
(3)Collect阶段:主要是在环形缓冲区当中分区排序,环形缓冲区默认大小是100m,当达到80%的时候就溢写到本地磁盘,也就是spill阶段
(4)Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘,生成一个临时文件。在数据写入本地磁盘之前,先会对数据进行一次本地排序
(5)Combine阶段:当所有数据处理完成后,Map Task对所有临时文件进行一次合并,以确保最终只生成一个临时文件

Reduce Task整体计算流程
(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
(3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。
在这里插入图片描述
1)Read阶段:通过RecordReader将对应的InputSplit解析出一系列的key/value

2)Map阶段:将解析出的key/value依次交给用户编写的map()函数处理,并产生一系列新的key/value

3)Collect阶段:在map()中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会生成key/value分片(通过调用Partition),并写入一个环形内存缓冲区

4)Spill阶段:当缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。在数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。

5)Combine阶段:当所有数据处理完成后,Map Task对所有临时文件进行一次合并,确保最终只会生成一个数据文件。

在这里插入图片描述
(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
(3)Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。
在这里插入图片描述
MapReduce
map和reduce数量的确定:
map:map的数量通常是由hadoop集群的DFS块(文件大小)大小确定的,也就是输入文件的总块数。
reduce:一般通过设定JobConf 的conf.setNumReduceTasks(int num)方法。

Commbiner
MapReduce中的Combiner就是为了避免map任务和reduce任务之间的数据传输而设置的,Hadoop允许用户针对map task的输出指定一个合并函数。即为了减少传输到Reduce中的数据量。它主要是为了削减Mapper的输出从而减少网络带宽和Reducer之上的负载。

MapReduce的设计流程:
本质是移动运算又移动数据
让程序在不同的机器上运行成为可能,想在哪个机器上运行就在哪个机器上运行,在不同的机器上运行大量的程序
MapReduce的运算执行流程图

MapTask程序
1 读取数据的路径
2 读取数据的起始位置
3 读取数据的长度
4 任务的编号
读取范围数据 , 获取每行 , 切割 , 输出 单词 和1

map阶段:分发的过程
根据hashcode取模进行分发【shuffle】

ReduceTask程序
根据任务的编号处理不同的数据 ,统计单词的个数输出
reduce阶段:根据任务编号处理对应的任务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值