MapReduce思考问题(每一个都算面试题)
Q1、map数量数越多越好吗?
不是,因为产生map任务是需要资源和时间,map任务越多,占用的资源和时间越多
Q2、hdfs是否适合存储小文件(MR角度出发)
不适合,小文件一多,意味着block块就多了,切片split也就多了,这样产生的map数量也就多了起来
Q3、split和map的关系
split的大小默认和block大小一致,如果想要减少map任务,就要将split切片大小调大,反之就调小
Q4、split大小可以随意调整吗?
split切片大小理论上来说调多大都可以,但是官方建议是128的整倍数,为了防止跨界点存储数据,加大网络消耗带宽,增加读取数据时间
Q5、map的数量一定是与split切片数量一致吗?
如果最后两个split切片实际大小加起来没有超过128M*1.1,那么会被读取到一个map任务中进行操作,如果超过的话,就分为两个map任务读取数据进行操作
Q6、map以什么样的格式读取数据
默认情况下读取文件中的一行数据,将这一行数据封装成一个键值对读取进来,键值对的默认类型是<LongWritable,Text>,LongWritable代表的是行开始索引,Text代表的是一行数据
Q7、 reduce默认的个数可以调整吗?
可以调整,默认mr只提供一个reduce,但是将来可以在代码中或者集群配置文件中设置reduce的个数
Q8、reduce的个数会带来什么影响
a、有几个reduce最终就会产生几个结果文件
b、reduce的数量会影响数据在环形缓冲区的分区编号的计算
c、reduce的数量也会影响整体的执行速度和效率
Q9、reduce干了什么
reduce主要是先从map中的结果文件中的对应数据拉取过来,去除编号后,对拉取到的小文件进行归并排序,执行reduce逻辑
针对整个MapReduce整个流程的思考
Q1、map的数量可以通过配置文件设置吗?
map的数量不能直接进行设置,但是可以设置splt切片的大小来影响map的数量
Q2、整个MapReduce过程中,经历了几次排序,分别是?
过程中总共经历了三次排序,分别是一次快速排序和两次归并排序,快速排序发生在环形缓冲区内部排序之后,第一次归并排序是是在环形缓冲区溢写完小文件之后,新进程将小文件进行归并排序生成map任务结果文件,第二次归并排序是在reduce拉取完每个map任务结果文件之后对这些拉取的数据进行归并排序
Q3、MapReduce中的shuffle阶段是哪几个阶段(请你说一说MapReduce中的shuffle阶段)
shuffle并不是官方定义的,是人为定义的一种阶段,是从map进入到环形缓冲区的时候到执行reduce任务之前这个阶段(也就是图中的红色虚线框这一部分)
还有一种shuffle阶段划分,map阶段shuffle和reduce阶段shuffle:
map阶段shuffle就是在map进入环形缓冲区之后到redue进行拉取之前这个阶段
reduce阶段shuffle是在reduce拉取数据到执行reduce执行任务之前整个阶段
标签:map,shuffle,思考问题,reduce,MapReduce,split,排序
From: https://www.cnblogs.com/peculiar/p/18194593