MapReduce的Shuffle过程

Shuffle是指从 Map 产生输出开始,包括系统执行排序以及传送Map输出到Reduce作为输入的过程.

Shuffle 阶段可以分为 Map 端的 Shuffle 阶段和 Reduce 端的 Shuffle 阶段.

Shuffle 阶段的工作过程,如图所示:

Map 端的 Shuffle 阶段

bash 复制代码
1)每个输入分片会让一个 Map 任务来处理,默认情况下,以 HDFS 的一个块的大小为一个分片.
   Map 函数开始产生输出时,并不是简单地把数据写到磁盘中;因为频繁的磁盘操作会导致性能严重下降.
   它的处理过程是把数据先写到内存中的一个缓冲区(环形缓冲区),并做一些预排序,以提升效率.
2)每个 Map 任务都有一个用来写入输出数据的循环内存缓冲区(默认大小为 100MB),当缓冲区中的数据量达到一个特定阈值(默认是 80%)时,系统将会启动一个后台线程,把缓冲区中的内容写到磁盘中[Spill]阶段.
   在写入磁盘过程中,Map 输出继续被写到缓冲区中,但如果在此期间缓冲区被填满,那么 Map 任务就会阻塞直到写磁盘过程完成.
3)在写磁盘前,线程首先根据数据最终要传递到的 reduce 任务把数据划分成相应的分区(Partition).在每个分区中,后台线程按 Key 进行排序,如果有一个 Combiner,便会在排序后的结果上运行.
4)一旦内存缓冲区达到溢写的阈值,就会创建一个溢写文件,因此在 Map 任务完成其最后一个输出记录后,便会有多个溢出写文件.
   在 Map 任务完成之前,溢写文件被合并成一个索引文件和数据文件(多路归并排序)[Merge Sort 阶段].
5)溢写文件归并完毕后,Map 任务将删除所有的临时溢写文件,并告知 TaskTracker 任务已完成;只要其中一个 Map 任务完成,Reduce 任务就会开始复制(http协议)它的输出[Copy 阶段].
6)Map 任务的输出文件放置在运行 Map 任务的 TaskTracker 的本地磁盘上,它是运行 Reduce 任务的 TaskTracker 所需要的输入数据.

Reduce 端的 Shuffle 阶段

bash 复制代码
1)Reduce 进程启动一些数据复制线程,请求 Map 任务所在的 TaskTracker 以获取输出文件[Copy 阶段].
2)将 Map 端复制过来的数据先放入内存缓冲区中[Merge阶段].
   Merge 有 3 种形式:内存到内存、内存到磁盘、磁盘到磁盘.
   默认情况下,第一种形式不启用,第二种形式一直在运行(Spill 阶段),直到结束,第三种形式生成最终的文件.
3)最终文件可能存在于磁盘中,也可能存在于内存中,但是默认情况下是位于磁盘中的.
   当 Reduce 的输入文件已定,整个 Shuffle 阶段就结束了;
   然后就是 Reduce 执行,把结果放到 HDFS 中[Reduce 阶段].
copy merge 占整个reduce运行进度的33%,但可能因为map阶段文件分布不均导致该阶段耗费50-70%的时间.

为什么缓冲区的阈值设定为80M,而不是100M写满后才把文件写入到硬盘呢?

bash 复制代码
环形缓冲区,可以使写入磁盘的过程不间断,提高任务的性能.  
保留20M可用空间的意义就是为了 map 可以持续不断的向 buffer 中写入数据;
如果设定100M写满再向硬盘写入的话,map 向 buffer 写入的进程就会中断,从而造成资源的浪费.

为什么在map阶段要进行merge sort ?

bash 复制代码
如果不排序的话,数据就会杂乱无章,
而经过排序后,各个map之间进行合并的话就会简单很多,
只需要进行纵向合并就可以得到我们需要的值了
相关推荐
GIS数据转换器1 小时前
基于AI智能算法的无人机城市综合治理
大数据·人工智能·科技·gis·无人机·智慧城市
黑客KKKing2 小时前
网络安全演练有哪些形式
大数据·网络·安全·web安全
图扑软件2 小时前
智慧城市新基建!图扑智慧路灯,点亮未来城市生活!
大数据·javascript·人工智能·智慧城市·数字孪生·可视化·智慧路灯
天氰色等烟雨3 小时前
Ollama 的“裸奔”大冒险:如何给你的 AI 穿上“安全裤”
大数据
shboka9207026 小时前
如何通过数据分析提升美容院顾客复购率
大数据·数据挖掘·数据分析
007php0079 小时前
go语言zero框架拉取内部平台开发的sdk报错的修复与实践
大数据·elasticsearch·搜索引擎
GIS数据转换器9 小时前
智能化水利监管:无人机视频在违章行为识别中的应用
大数据·人工智能·物联网·无人机·智慧城市
火龙谷10 小时前
hadoop案例实践:气象大数据离线分析
大数据·hadoop·分布式
白鲸开源10 小时前
【实操回顾】基于Apache SeaTunnel从MySQL同步到PostgreSQL——Demo方舟计划
大数据