分步式并行计算框架Map Reduce
是指实现某项任务或某项工作从开始到结束的计算过程或流的结构
MapReduce计算框架图示:
分布式并行计算架构
一个大的任务被拆分成多个小任务,每个小任务同时执行。按照执行流程进行计算。
MapReduce核心思想 分而治之,先分后和(只有一个模型) Map负责数据拆分 map: [k1,v1] → [(k2,v2)] Reduce负责数据合并 reduce: [k2, {v2,…}] → [k3, v3]
提醒:Mapreduce的输入是一个目录,那么会将目录内的所有文件进行读取计算, 若是一个文件,那么只计算该文件。 Mapreduce的输出路径绝对不能已存在
MapReduce执行流程
执行流程
Partition的计算逻辑
对map输出的key 取哈希值,用这个哈希值与reducetask的值取余。余几,就将这个key,value放在 对应的分区编号里(分区有多个编号)。
Combiner作用
Map结束后,在Map端进行局部聚和。作用:较少网络传入次数,降低了网络开销。
Split对数据进行逻辑切分
hdfs数据块大小是128 ,split 逻辑切分数据块大小是128M
HDFS 128 是存储层面的概念,是切分数据的分界点。
split 128 是一个逻辑切分。
这两个128没有关系。
Map 输出数据到内存
map输出的数据写入环形缓冲区(内存),缓冲区的默认大小是100M(可修改)。当数据达到阈值(默认0.8-可修
改)时,环形缓冲区进行flash,
环形缓冲区:数据在输出的同时,数据也可以写入空余的空间内。
当flash的数据个数达到一定的数量时(默认4个)。对数据进行合并(merge)。
Reduce在Map拷贝数据
Map 输出的结果写入本地,reduce主动发出拷贝进程到Map端拷贝数据。
reduce获取大数据后,将数据写入内存,当数据达到阈值时进行flash.
当flash的个数达到一定的量时,进行合并,最终发送给reduce
总结
流程角度
内存角度
Shuffle阶段是在Map的输出到Reduce的输入
扩展
在MR(MapReduce)阶段可以优化的点1、加大环形缓冲区的内存 2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用) 3、对输出的进行压缩(压缩-解压的过程会消耗CPU) 4、让Map端的达到最高效率(尽量减少环形缓冲区flush的次数,减少磁盘IO 的使用次数) 5、让reduce端的达到最高效率(尽量减少环形缓冲区flush的次数,尽量将数据放在内存上进行计算)集群优化的核心思路是什么在网络带宽、磁盘IO是瓶颈的前提下 能不使用IO 网络就不使用,在必须使用的前提下,能少用就少用。 所有的,只要能够减少网络带宽的开销,只要能够减少磁盘io的使用的次数的配置项,都是集群调优的可选项。 (可选项包括: 软件层面【系统软件和集群软件】,硬件层面,网络层面)