MapReduce 知识点

MapReduce核心思想

分而治之,先分后和,就是将一个大文件拆分成多个小文件,并行处理,最终进行合并
map负责分 reduce负责合

偏移量

行首字符到文档最前端的字符数量

Suffer包含哪些步骤

partition 分区
Sort 排序
combiner 局部聚合
Group 分组

MR从读取数据到写入hdfs经过哪些步骤

第1步:InputFormat
InputFormat 到hdfs上读取数据
将数据传给Split
第2步:Split
Split将数据进行逻辑切分,
将数据传给RR
第3步:RR
RR:将传入的数据转换成一行一行的数据,输出行首字母偏移量和偏移量对应的数据
将数据传给MAP
第4步:MAP
MAP:根据业务需求实现自定义代码
将数据传给Shuffer的partition
第5步:partition
partition:按照一定的分区规则,将key value的list进行分区。
将数据传给Shuffer的Sort
第6步:Sort
Sort:对分区内的数据进行排序
将数据传给Shuffer的combiner
第7步:combiner
combiner:对数据进行局部聚合。
将数据传给Shuffer的Group
第8步:Group
Group:将相同key的key提取出来作为唯一的key,
将相同key对应的value获取出来作为value的list
将数据传给Reduce
第9步:Reduce
Reduce:根据业务需求进行最终的合并汇总。
将数据传给outputFormat
第10步:outputFormat
outputFormat:将数据写入HDFS

如何设置ReduceTask的数量

调用job的setNumReduceTasks()方法传入参数进行设置

Combiner的作用

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

Combiner运行在MapReduce的哪一端?

Map端

Maptask的数量是可以人为设置的吗?

不可以

Shuffer阶段的Partition分区的算法是什么?

对map输出的key 进行哈希,获取到一个哈希值,用这个哈希值与reducetask的数量取余。余几,这个数据就放在余数编号的分区(partition)中。

Split逻辑切分数据,切分大小是多大?

128M

内存角度介绍Map的输出到Reduce的输入的过程

Map的输出先写入环形缓冲区(默认大小100M-可以人为调整)(可以再输出的同时写入数据),当缓冲区内的数据
达到阈值(默认0.8-可以人为调整)时,对数据进行flash。flash 出去的数据的数量达到一定量(默认4个)时,进行数据的合并。
Reduce 主动发出拷贝进程(默认5个copy进程)到Map端获取数据。
获取到数据后,将数据写入内存,当数据达到阈值,将数据flash出去。
当flash出去文件达到一定的量时,进行数据的合并。最终将数据发送给reduce

最优的Map效率是什么?

尽量减少环形缓冲区flush的次数(减少磁盘IO 的使用次数)

最优的Reduce是什么?

尽量减少环形缓冲区flush的次数
尽量将所有的数据在内存中计算

在MR阶段,有哪些优化的点?(至少两个点)

1、加大环形缓冲区的内存
2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用)
3、对输出的进行压缩(压缩-解压的过程会消耗CPU)

集群优化的核心思路是什么?

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

你可能感兴趣的:(MapReduce 知识点)