分步式并行计算框架Map Reduce


是指实现某项任务或某项工作从开始到结束的计算过程或流的结构

MapReduce计算框架图示:

mapreduce初级编程实践实验 mapreduce实训报告_数据

分布式并行计算架构

一个大的任务被拆分成多个小任务,每个小任务同时执行。按照执行流程进行计算。

MapReduce核心思想 分而治之,先分后和(只有一个模型) Map负责数据拆分 map: [k1,v1] → [(k2,v2)] Reduce负责数据合并 reduce: [k2, {v2,…}] → [k3, v3]

mapreduce初级编程实践实验 mapreduce实训报告_mapreduce初级编程实践实验_02

mapreduce初级编程实践实验 mapreduce实训报告_数据_03

提醒:Mapreduce的输入是一个目录,那么会将目录内的所有文件进行读取计算, 若是一个文件,那么只计算该文件。 Mapreduce的输出路径绝对不能已存在

MapReduce执行流程


执行流程

Partition的计算逻辑

对map输出的key 取哈希值,用这个哈希值与reducetask的值取余。余几,就将这个key,value放在 对应的分区编号里(分区有多个编号)。

Combiner作用

Map结束后,在Map端进行局部聚和。作用:较少网络传入次数,降低了网络开销。

Split对数据进行逻辑切分


hdfs数据块大小是128 ,split 逻辑切分数据块大小是128M

HDFS 128 是存储层面的概念,是切分数据的分界点。

split 128 是一个逻辑切分。

这两个128没有关系。

mapreduce初级编程实践实验 mapreduce实训报告_环形缓冲_04

Map 输出数据到内存


map输出的数据写入环形缓冲区(内存),缓冲区的默认大小是100M(可修改)。当数据达到阈值(默认0.8-可修

改)时,环形缓冲区进行flash,

环形缓冲区:数据在输出的同时,数据也可以写入空余的空间内。

当flash的数据个数达到一定的数量时(默认4个)。对数据进行合并(merge)。

mapreduce初级编程实践实验 mapreduce实训报告_环形缓冲_05

Reduce在Map拷贝数据


Map 输出的结果写入本地,reduce主动发出拷贝进程到Map端拷贝数据。

reduce获取大数据后,将数据写入内存,当数据达到阈值时进行flash.

当flash的个数达到一定的量时,进行合并,最终发送给reduce

mapreduce初级编程实践实验 mapreduce实训报告_mapreduce初级编程实践实验_06

总结


流程角度

mapreduce初级编程实践实验 mapreduce实训报告_MapReduce_07

内存角度

mapreduce初级编程实践实验 mapreduce实训报告_MapReduce_08

Shuffle阶段是在Map的输出到Reduce的输入

扩展


在MR(MapReduce)阶段可以优化的点1、加大环形缓冲区的内存 2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用) 3、对输出的进行压缩(压缩-解压的过程会消耗CPU) 4、让Map端的达到最高效率(尽量减少环形缓冲区flush的次数,减少磁盘IO 的使用次数) 5、让reduce端的达到最高效率(尽量减少环形缓冲区flush的次数,尽量将数据放在内存上进行计算)集群优化的核心思路是什么在网络带宽、磁盘IO是瓶颈的前提下 能不使用IO 网络就不使用,在必须使用的前提下,能少用就少用。 所有的,只要能够减少网络带宽的开销,只要能够减少磁盘io的使用的次数的配置项,都是集群调优的可选项。 (可选项包括: 软件层面【系统软件和集群软件】,硬件层面,网络层面)