mapreduce测试题

1请写出Mapper类中的run()方法中的三个方法的执行顺序以及执行次数

1 setup(context) 加载环境初始化 1

2 map() 执行map方法 等于行数

3 clearnup() map的全局输出 1

2 统计mapper端的种类,是在mappre端还是在reduce端统计?

记录map或者reduce的信息条数,可以持续化输出到操作以及所在机器的数据库, 用来生成报表记录处理的信息来源的情况。

默认120种?不建议设置太大,会影响application master性能

拿到结果后可以持久化的输出到数据库

3 mapreduce任务的map输出类型是由什么确定的

默认的mapper是IdentityMapper,默认的reducer是IdentityReducer,它们将输入的键和值原封不动地写到输出中。 默认的partitioner是HashPartitinoer,它根据每条记录的键进行哈希操作来分区。

参考

4 已知输入目录有三个文件夹和文件大小,hdfs大小为32m,请问会产生几个mapper对象

word1.txt 4m

word2.txt 4m

word3.txt 98m

5个

5 mapreduce为什么要排序

问题:shffle为什么要排序?|| 我理解错了???

shuffle要排序是为了在shuffle阶段的排序降低reduce阶段的内存使用量

因为reduce阶段(应该是在shuffle后期???reeduce接收数据之前???)要分组,将key相同的放在一起进行规约: 使用了一种数据结构(HashMap)和一种排序算法(quicksort??吗)如果在reduce阶段执行就 太消耗内存了 ,而map阶段的输出是要溢写到磁盘上的,在磁盘中的可以忽略算法的空间复杂度(因为存储容量够大???),而换取时间复杂度(快?) 所以 map端排序(shuffle)是为了减轻reduce端的排序压力。

参考1 参考2 参考3

6 如果有两个reduce 一个maptask会产生多少个分区?如何实现哪个数据放在哪个分区

2个

通过hash的方式

7 说说对mapreduce中数据倾斜的理解,以及如何解决,

reduce拉取的数据分布不均匀造成大量数据热点,

hadoop计算框架的特性:不怕数据大,但是怕数据倾斜,job数比较多的时候 作业运行下效率低,如子查询较多。 不会发生数据倾斜的情况:sum count max min 会发生数据倾斜的情况:group by count(dicstict)小表关联大表(???)

优化办法

重写partition类(==重置hash值????)???

取hash值时加入随机数或者设置序列

其他请参考

参考1 参考2

8 mapreduce的shuffle过程是从哪里到哪里

(map的出口,reduce的入口)

9 combine的理解

1.Combiner是MR程序中Mapper和Reduce之外的一种组件

2.Combiner组件的父类就是Reducer

3.Combiner和Reducer之间的区别在于运行的位置

4.Reducer是每一个接收全局的Map Task 所输出的结果

5.Combiner是在MapTask的节点中运行

参考

10 请问下面代码设置的压缩格式生效吗, 为什么

Configuration conf = getConf();

Job job = Job.getInstance(conf, "wordcount");

job.getConfiguration().set("mapreduce.map.output.compress", "true");

job.getConfiguration("mapreduce.map.output.compress.codec", SnappyCodec.class.getName());

....

job.waitForCompletion()

生效 ???

11 mapreduce中的Configuration 对象有什么作用

Configuration 是hadoop五大组件(???)的公用类,所以放在了core下,这个类是作业的配置信息类, 任何作业的配置信息必须通过Configuration传递,因为通过Configuratiaon可以实现多个map 与多个reducer任务之间的共享信息。

参考
原文地址:https://www.cnblogs.com/xido/p/13862333.html