1. MapReduce核心思想

分而治之,先分后和。将一个大的,复杂的任务或工作,拆分成多个小的任务,并行处理,最终进行合并。

MapReduce由map和reduce组成

Map:将数据进行拆分

Reduce:对数据进行汇总

2.偏移量

每个字符移动到当前文档的最前面需要移动的字符个数。

3.Suffle包含哪些步骤

Protition(分区) --> sort(排序) --> combiner -->Group(分组)

4.MR从读取数据开始到将最终结果写入HDFS经过哪些步骤

  1. InputFromat:读取数据,数据给split
  2. split 按照一定的逻辑切分数据 数据传给RR
  3. RR将数据转换成一条一条的,输出首字母偏移量和偏移量对应的数据,将数据给Map
  4. Map根据自身业务需求书写代码,将数据给suffle的protition
  5. Protition:按照一定的逻辑分区 ,将key    value的list分区,将数据传给sort
  6. Sort:按照一定的逻辑对分区的数据进行排序,将数据传给combiner
  7. Combiner:对数据进行局部聚合,将数据传给Group
  8. Group:将相同的key,提取为唯一的key,将key对应的value提取出来作为value的list。将数据传给Reduce
  9. Reduce 按照自身需求进行合并汇总,将数据传给OutputFormat
  10. 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使用的可选项,都可以作为集群调优的可选项。(软件层面(操作系统--集群层面)、硬件层      面、网络层面)