MapReduce面试题

1.MapReduce核心思想  
   map负责切分,reduce负责合并(先分后合,分而治之)
2.偏移量
  :指的是每行行首字母移动到文本的最前面需要一定的字符。
3.Suffle包含哪些步骤
partition(分区)-sort(排序)-combiner(局部聚合)=group(分组)
4.MR从读取数据开始到将最终结果写入HDFS经过哪些步骤:
第一步:InputFormat
InputFormat 在HDFS文件系统中读取要进行计算的数据
第二步:Split
Split 将数据进行逻辑切分,切分成多个任务。 
第三步:RR( RecordReader)
RR 将切分后的数据转换成key value进行输出 
第四步:Map
接收一条一条的数据(有多少行数据Map运行多少次,输出的次数根据实际业务需求而定)根域业务需求编写代码,map的输出是key,value的list。
第五步: partition
partition: 按照一定的规则对 **key value的 list进行分区
第六步:Sort
Sort :对每个分区内的数据进行排序。
第七步:Combiner
Combiner: 在Map端进行局部聚合(汇总)
目的是为了减少网络带宽的开销
第八步:Group
Group: 将相同key的key提取出来作为唯一的key ,将相同key对应的value提取出来组装成一个value 的List 
第九步:reduce  reduce: 
根据业务需求对传入的数据进行汇总计算。
第十步:outputFormat  
outputFormat:将最终的额结果写入HDFS
5.如何设置ReduceTask的数量
reducetask的设置:在驱动类中添加 job.setNumReduceTasks(2);
6.combiner的作用
Map结束后,在Map端进行局部聚和。
作用:较少网络传入次数,降低了网络开销。
7.combiner运行在MapReduce的哪一端?
Map端。在Map端中shuffle中。
8.Maptask的数量是可以人为设置的吗?
不可以,MapTask数量决定数据
9.Shuffle阶段的Partition分区算法是什么
  计算逻辑:对map输出的key 取哈希值,用这个哈希值与reducetask的值取余。
  余几,就将这个key,value放在对应的分区编号里(分区有多个编号)
9.Split逻辑切分数据,节分大小是多大? 
 128M,默认一个block块对应一个split切片
	
11内存角度介绍Map的输出到Reduce的输入的过程。
1.Map 输出数据到内存:
  map输出的数据写入环形缓冲区(内存),缓冲区的默认大小是100M(可修改)。当数据达到阈值(默认0.8-可修改)时,环形缓冲区进行flash,
  环形缓冲区:数据在输出的同时,数据也可以写入空余的空间内。
当flash的数据个数达到一定的数量时(默认4个)。对数据进行合并(merge)。
2:Reduce在Map拷贝数据
 Map 输出的结果写入本地,reduce主动发出拷贝进程到Map端拷贝数据。
 reduce获取大数据后,将数据写入内存,当数据达到阈值时进行flash.
 当flash的个数达到一定的量时,进行合并,最终发送给reduce
12.最优的Map效率是什么?
Map端的最高效率:尽量减少环形缓冲区flush的次数(减少磁盘IO的使用次数)
1、加大环形缓冲区的内存
2、增大缓冲区阈值的大小 
3、对输出的进行压缩。
13.最优的reduce是什么?
1.尽量减少环形缓冲区flush的次数
2.尽量将所有的数据在内存计算。
14.在MapReduce阶段,有哪些优化的点?(至少两个点)
1、加大环形缓冲区的内存
2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用)
3、对输出的进行压缩(压缩-解压的过程会消耗CPU)
15.集群优化的核心思路是什么?
在网络带宽,磁盘IO是瓶颈的前期下
能不使用IO网络就不使用,在必须使用的前提下,能少用就少用。
所有的只要能够减少网络带宽的开销,只要能够减少磁盘IO的使用的次数的配置项,都是集群调优的可选项。
(可选项包括:软件层面【系统软件和集群软件】,硬件层面,网络层面)



你可能感兴趣的:(MapReduce)