Hadoop--分布式计算组件MapReduce框架原理 | 青训营笔记

131 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

MapReduce框架原理

image.png

MapReduce程序运行时三类实例进程:

(1)MrAppMaster: 负责整个程序的过程调度及状态协调;

(2)MapTask: 负责Map阶段的数据处理流程,并行运行,互不相干;

(3)ReduceTask: 负责Reduce阶段的的数据处理流程,并发实例互不相干,但数据依赖于上一阶段所有MapTask并发实例的输出

image.png

1. InputFormat数据输入

1.1 数据块与数据切片

数据块: Block是 HDFS 物理上把数据分成一块一块。数据块是 HDFS 存储数据的单位

数据切片: 数据切片只是逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask。

切片机制:
(1) 简单地按照文件的内容长度进行切片;
(2) 切片时,默认等于Block大小;
(3) 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

1.2 数据切片与 MapTask 并行度决定机制

MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。

image.png

2. shuffle机制

Map方法之后,Reduce方法之前的数据处理过程称为 Shuffle。

image.png

Shuffle过程包含在Map和Reduce两端,即 Map shuffleReduce shuffle
Map shuffle:
对于Map输出的结果进行分区(partition)(按照Reduce的并行度进行分区,也就是key值对reduce进行hash计算)、collector(环形内存缓冲区KVBuffer)排序(sort)(按照分区Id 排序,同一分区按照key值排序 默认升序)、分割(spill),然后将属于同一分区的输出合并(merge) 在一起并写在磁盘上,最终生成一个有序的分区文件。

Reduce shuffle:
当mapreduce任务提交后,reduce task就不断通过RPC从JobTracker那里获取map task是否完成的信息,如果获知某台TaskTracker上的map task执行完成,会通知父TaskTracker状态已经更新,TaskTracker进而通知JobTracker(这些通知在心跳机制中进行),Shuffle的后半段过程就开始启动。

主要经过 CopySortMerge两个阶段。

3. OutputFormat

  • OutputFormat 是 MapReduce 输出的基类,所有实现MapReduce输出都实现了 OutputFormat 接口;
  • 默认输出格式为 TextOutputFormat;
  • 输出数据到 MySQL、HBase、Elasticsearch等存储框架中。