- MapReduce核心思想
分而治之,先分后和。将一个大的,复杂的任务或工作,拆分成多个小的任务,并行处理,最终进行合并。
MapReduce由map和reduce组成
Map:将数据进行拆分
Reduce:对数据进行汇总
2.偏移量
每个字符移动到当前文档的最前面需要移动的字符个数。
3.Suffle包含哪些步骤
Protition(分区) --> sort(排序) --> combiner -->Group(分组)
4.MR从读取数据开始到将最终结果写入HDFS经过哪些步骤
- InputFromat:读取数据,数据给split
- split 按照一定的逻辑切分数据 数据传给RR
- RR将数据转换成一条一条的,输出首字母偏移量和偏移量对应的数据,将数据给Map
- Map根据自身业务需求书写代码,将数据给suffle的protition
- Protition:按照一定的逻辑分区 ,将key value的list分区,将数据传给sort
- Sort:按照一定的逻辑对分区的数据进行排序,将数据传给combiner
- Combiner:对数据进行局部聚合,将数据传给Group
- Group:将相同的key,提取为唯一的key,将key对应的value提取出来作为value的list。将数据传给Reduce
- Reduce 按照自身需求进行合并汇总,将数据传给OutputFormat
- OutputFormat写入数据到HDFS
5.如何设置ReduceTask
setNumReduceTasks()方法传入参数进行设置
6.combiner的作用
对数据进行局部聚合
7.combiner运行在MapReduce的哪一端?
在map端局部聚和,设置reduce的class
8.Maptask的数量是可以认为设置的吗
不可以
9.Shuffle阶段的Partition分区算法是什么
对key进行哈希,获取到一个哈希值,用这个哈希值与reducetask的数量取余,余几,这个数据就放在余数编号的partition中
10.Split逻辑切分数据 切分大小是多大?
切分的大小为128M
这里的128M 与 HDFS数据块的128M没有任何关系
HDFS的128M是存储层面的数据切分
split的128M是计算层面 只不过数据恰好相等
两个128相同的原因是:一个集成程序能够正好计算一个数据块
11.内存角度介绍Map的输出到Reduce的输入的过程
Map的输出先写入环形缓冲区,当缓冲区内的数据
达到阈值时,对数据进行flush。flush出去的数据的数量达到一定量(默认4个)时,进行数据的合并。
Reduce 主动发出拷贝进程(默认5个copy进程)到Map端获取数据。
获取到数据后,将数据写入内存,当数据达到阈值,将数据flush出去。
当flush出去文件达到一定的量时,进行数据的合并。最终将数据发送给reduce
12.最优的Map效率是什么
尽量减少环形缓冲区flush的次数(减少IO的使用)
1:调大环形缓冲区的大小,将100M调更大
2:调大环形缓冲区阈值的 大小
3:对Map输出的数据进行压缩(数据在压缩和解压的过程中会消耗CPU)
13.最优的reduce是什么
尽量将所有的数据写入内存,在内存中进行计算
14.在MR阶段 有哪些优化的点
增大内存
增大阈值
15. 集群优化的核心思路是什么
在网络带宽、磁盘IO是瓶颈的前提下
能不使用IO网络,就不使用。在必须使用的情况下,能少用IO、网络,就少用
所有的能够减少网络开销的、减少IO使用的可选项,都可以作为集群调优的可选项。(软件层面(操作系统--集群层面)、硬件层 面、网络层面)