本文共 1221 字,大约阅读时间需要 4 分钟。
上图来自hadoop权威指南,但是看起来还是比较复杂的。总结起来(缓冲,排序,合并,拷贝,归并排序) 我们知道,mapreduce计算框架会将一个任务分割成若干个map,在reduce端进行合并输出,(一般情况,并不完全准确)从map端输出到输入到reduce端中这一系列动作称为shuffle流程。 (1)环形缓冲区 每个map任务产生输出时,都有一个环形缓冲区用于存储任务输出 阈值为80%(即100MB*0.8)这都是可以修改的 当达到阈值后,后台线程开始把内容溢出到磁盘(spill),每次达到阈值,都会新建一个spill file,map继续将数据写入环形缓冲区,如果缓冲区被写满,map会被阻塞 (2)写过程(spill)(3)首先要将Map端(可能有多个Map端)产生的输出文件拷贝到Reduce端。接下来就是sort阶段,即merge阶段,因为这个阶段的主要工作是执行了归并排序。从Map端拷贝到Reduce端的数据都是有序的,所以很适合归并排序。最终在Reduce端生成一个较大的文件作为Reduce的输入。
map输出的数据到reduce之间一段过程,是mapreduce的核心
(1) 数据从map端出来,会首先进入环形缓冲区,环形缓冲区默认大小是100MB,默认阈值是80MB,在环形缓冲区中分区和排序,达到阈值新建一个spill文件,同时开始溢出和输入。 (2) 每10个流合并成一个spill文件 (3) 多个Spill文件合并成一个输出文件 (4) 如果环形缓冲区写满,map端会阻塞直到磁盘过程完成 (5) 多个map端的输出文件会被复制到reduce端进行归并排序并输出 注:【Combiner】就是一个简单Reducer操作,它在执行Map 任务的节点本身运行,先对Map 的输出做一次简单Reduce,使得Map的输出更紧凑,更少的数据会被写入磁盘和传送到Reducer转载地址:http://orqen.baihongyu.com/