MapReduce运行机制

MapReduce 的运行流程

这里写图片描述
整个流程可以分为 split,map,shuffle,reduce,output 五个阶段

1 split

在 split 阶段会把需要处理的数据划分为不同的切片;把个切片交给不同 map 程序进行处理;切片后数据会被解析为 kv 对输入到 map 进行处理。

2 map

在 map 阶段可以对输入的 kv 对进行处理后再以 kv 对的形式输出。

3 Shuffle(混洗)

shuffle 的目的是保证 reduce 处理的数据是有序的,并且尽可能的减少时间和资源消耗。shuffle 过程需要分别在 map 端和 reduce 端进行。

3.1 Map Shuffle

这里写图片描述
在 map 端的 shuffle 过程是对 map 的输出结果进行一系列处理,最终得到一个分区有序的文件。分区指的是需要同一个 reduce 处理的数据存储在一起;有序指的是同一个分区内的数据按照 key 升序排列。整体流程如下:

3.1.1 partition(分区)

partition 阶段计算并保存 map 输出的每对 kv 需要发送到的 reduce 编号。

3.1.2 spill(溢写)

map 输出的数据需要先输出到一个叫做 kvbuffer 的内存缓冲区,等缓冲区到达阈值的时候一次性把数据写入硬盘,这个过程叫做 spill。kvbuffer 的大小默认是 100M,阈值是 80%。这样设计的目的是为了提高写数据的效率,同时保证写数据的时候不会阻塞 map 的输出。

3.1.3 sort(排序)

在溢写之前会对缓冲区中的数据按照 partition 和 key 进行升序排列,然后再写入硬盘。排序的结果就是 kvbuffer 中的数据是按照 partition 聚集在一起,同一 partiton 中的数据按照 key 有序排列。

3.1.4 merge(合并)

如果 map 的输出数据量很大,可能会进行好几次 spill 操作,产生很多溢写文件。map 输出完毕后我们还需把所有的 spill 文件 merge 为一个文件。最终的合并结果仍然保证数据按照 partition 聚集在一起,同一 partiton 中的数据按照 key 有序排列。

3.2 Reduce Shuffle

在 reduce 端 shuffle 的目的是从不同的 map 端获取数据,进行排序合并后输入给 reduce。

3.2.1 copy(下载)

reduce 端会从 map 端的合并文件中下载对应自己的那一部分数据。如果数据量较小会放在内存中,数据量较大的话会写入磁盘。

3.2.2 megre && sort && grouping(合并,排序,聚合)

把来自不同 map 的数据边合并边按照 key 进行排序。把所有 value 按照 k 聚合到一个个的迭代器中,形成新的 kv 对。这些新的 kv 对会输入给 reduce 进行处理。

4 reduce

在 reduce 阶段可以对输入的 kv 对进行处理后再以 kv 对的形式输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值