MapReduce面试题

2021-04-13 14:27:59 浏览数 (1)

1.MapReduce核心思想 分而治之,先分后和(只有一个模型) 【将一个大的、复杂的工作或任务,拆分成多个小的任务,并行处理,最终进行合并。适用于大量复杂的、时效性不高的任务处理场景(大规模离线数据处理场景)。】 Map负责数据拆分 map: [k1,v1] → [(k2,v2)] Reduce负责数据合并 reduce: [k2, {v2,…}] → [k3, v3]

2.偏移量 :指的是每行行首字母移动到文办的最前面需要一定的字符。

3.Suffle包含哪些步骤 partition(分区)-sort(排序)-combiner(局部聚合)=group(分组)

4.MR从读取数据开始到将最终结果写入HDFS经过哪些步骤: 第一步:InputFormat InputFormat 在HDFS文件系统中读取要进行计算的数据输出给Split 第二步:Split Split 将数据进行逻辑切分,切分成多个任务。输出给RR 第三步:RR( RecordReader) RR 将切分后的数据转换成key value进行输出 key : 每一行行首字母的偏移量 value: 每一行数据输出给Map 第四步:Map 接收一条一条的数据(有多少行数据Map运行多少次,输出的次数根据实际业务需求而定)根域业务需求编写代码 Map的输出是 key value的 list 输出给Shuffle(partition) ---------------------------------------Map------------------------------------------------------ 第五步: partition partition: 按照一定的规则对 **key value的 list进行分区输出给Shuffle(sort) 第六步:Sort Sort :对每个分区内的数据进行排序。 输出给Shuffle(Combiner) 第七步:Combiner Combiner: 在Map端进行局部聚合(汇总) 目的是为了减少网络带宽的开销输出给Shuffle(Group) 第八步:Group Group: 将相同key的key提取出来作为唯一的key 将相同key对应的value提取出来组装成一个value 的List 输出给Shuffle(reduce) ------------------------------------Shuffle-------------------------------------------- 第九步:reduce reduce: 根据业务需求对传入的数据进行汇总计算。输出给Shuffle(outputFormat) 第十步:outputFormat outputFormat:将最终的额结果写入HDFS

5.如何设置ReduceTask的数量 reducetask的设置: job.setNumReduceTasks(2);

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

7.combiner运行在MapReduce的哪一端? map 每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能.

8.Maptask的数量是可以人为设置的吗? 不可以。

9.Shuffle阶段的Partition分区算法是什么 计算逻辑:对map输出的key 取哈希值,用这个哈希值与reducetask的值取余。 余几,就将这个key,value放在对应的分区编号里(分区有多个编号)

10.Split逻辑切分数据,节分大小是多大? hdfs数据块大小是128 ,split 逻辑切分数据块大小是128M HDFS 128 是存储层面的概念, 是切分数据的分界点。 split 128 是一个逻辑切分。 这两个128没有关系。

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的使用次数)

13.最优的reduce是什么? 1.尽量减少环形缓冲区flush的次数 2.尽量将所有的数据在内存计算。

14.在MapReduce阶段,有哪些优化的点?(至少两个点) 1、加大环形缓冲区的内存 2、增大缓冲区阈值的大小 (考虑剩余的空间是不是够系统使用) 3、对输出的进行压缩(压缩-解压的过程会消耗CPU)

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

0 人点赞