MapReduce :MapReduce 是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和MapReduce自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上。
MapReduce 进程:一个完整的 MapReduce 程序在分布式运行时有三类实例进程,分别为MrAppMaster,MapTask,ReduceTask。
MrAppMaster:负责整个程序的过程调度及状态协调。
MapTask:负责 Map 阶段的整个数据处理流程。并行处理输入数据。
ReduceTask:负责 Reduce 阶段的整个数据处理流程。对 Map 结果进行汇总。
数据块: Block 是 HDFS 物理上把数据分成一块一块。 数据块是 HDFS 存储数据单位。
数据切片: 数据切片只是在逻辑上对输入进行分片, 并不会在磁盘上将其切分成片进行存储。数据切片是 MapReduce 程序计算输入数据的单位,一个切片会对应启动一个 MapTask。
Combiner:是MR程序中Mapper和Reducer之外的一种组件。Combiner是在每一个MapTask所在的节点运行。Combiner的作用为对每一个MapTask的输出进行局部汇总,以减小网络传输量。
图中分为2个文件,一个200M,一个100M。一个block大小默认为128M,则第一个文件128M分配给一个MapTask,剩下72M分配给另外一个MapTask。
InputFormat:
Mapper:数据源通过InputFormat取读后,交给Mapper进行后续业务逻辑(用户自己写的代码)处理。
Shuffle:包含排序、分区、压缩、合并等等。
Reducer:拉取Mapper阶段处理的数据,拉的过程中,要经历shuffle的过程。
OutputFormat:对输出的控制,比如可以输出到文件、mysql、Hbase、ES等。
承接上一张图
11. Combine合并,预聚合(优化手段),可以对每个MapTask的输出进行局部汇总,以减少网络传输量。 12. MrappMaster,所有MapTask任务完成后,启动相应数量的ReduceTask,并告知ReduceTask处理数据范围(数据分区)。 13. ReduceTask主动从MapTask对应的分区,拉取数据。因为虽然每个MapTask的数据已经是有序,但是会从多个MapTask拉取数据,所以还要进行归并排序。 14. 将数据传给reduce进行处理,一次读取一组数据。 15. GroupingComparator,用的比较少。hadoop默认分组是按key,也就是一个key是一组,GroupingComparator主要的作用是可以决定哪些数据作为一组。 16. 最后通过OutputFormat输出,默认是TextOutputFormat。
Map 方法之后, Reduce 方法之前的数据处理过程称之为 Shuffle。
首先,通过getPartition获取是哪个分区。标记分区后,进入环形缓冲区。一半用于存数据,另外一半存索引。当写入80%的数据后,就会反向溢写。在溢写之前会将缓冲区的数据进行排序。之后可以进行Combiner(可选)。然后进行多次溢写,一个是spill.index(索引),一个是Spill.out(数据)。之后对所有溢写到磁盘的文件进行归并排序。之后可以进行Combiner(可选)。之后可以设置压缩(提高传输效率)。之后数据写到磁盘上,等待reduce拉取数据。
ReduceTask主动从MapTask对应的分区,拉取数据。先尝试把数据存在内存里。如果文件大小超过一定阈值,则溢写磁盘上,否则存储在内存中。如果磁盘上文件数目达到一定阈值,则进行一次归并排序以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据溢写到磁盘上。当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行一次归并排序。然后做分组(按相同key分组)。再进入Reduce方法。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有