分步式并行计算框架Map Reduce


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

MapReduce计算框架图示:
一周学习之MapReduce总结

分布式并行计算架构

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

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

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

MapReduce执行流程


执行流程

Partition的计算逻辑

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

Combiner作用

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

Split对数据进行逻辑切分


hdfs数据块大小是128 ,split 逻辑切分数据块大小是128M
HDFS 128 是存储层面的概念,是切分数据的分界点。
split 128 是一个逻辑切分。
这两个128没有关系。
一周学习之MapReduce总结

Map 输出数据到内存


map输出的数据写入环形缓冲区(内存),缓冲区的默认大小是100M(可修改)。当数据达到阈值(默认0.8-可修
改)时,环形缓冲区进行flash,
环形缓冲区:数据在输出的同时,数据也可以写入空余的空间内。
当flash的数据个数达到一定的数量时(默认4个)。对数据进行合并(merge)。
一周学习之MapReduce总结

Reduce在Map拷贝数据


Map 输出的结果写入本地,reduce主动发出拷贝进程到Map端拷贝数据。
reduce获取大数据后,将数据写入内存,当数据达到阈值时进行flash.
当flash的个数达到一定的量时,进行合并,最终发送给reduce
一周学习之MapReduce总结

总结


流程角度

一周学习之MapReduce总结

内存角度

一周学习之MapReduce总结
Shuffle阶段是在Map的输出到Reduce的输入

扩展


在MR(MapReduce)阶段可以优化的点
1、加大环形缓冲区的内存
2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用)
3、对输出的进行压缩(压缩-解压的过程会消耗CPU)
4、让Map端的达到最高效率(尽量减少环形缓冲区flush的次数,减少磁盘IO 的使用次数)
5、让reduce端的达到最高效率(尽量减少环形缓冲区flush的次数,尽量将数据放在内存上进行计算)

集群优化的核心思路是什么
在网络带宽、磁盘IO是瓶颈的前提下
能不使用IO 网络就不使用,在必须使用的前提下,能少用就少用。
所有的,只要能够减少网络带宽的开销,只要能够减少磁盘io的使用的次数的配置项,都是集群调优的可选项。
(可选项包括: 软件层面【系统软件和集群软件】,硬件层面,网络层面)

相关文章: