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 参考36 如果有两个reduce 一个maptask会产生多少个分区?如何实现哪个数据放在哪个分区
2个
通过hash的方式
7 说说对mapreduce中数据倾斜的理解,以及如何解决,
reduce拉取的数据分布不均匀造成大量数据热点,
hadoop计算框架的特性:不怕数据大,但是怕数据倾斜,job数比较多的时候 作业运行下效率低,如子查询较多。 不会发生数据倾斜的情况:sum count max min 会发生数据倾斜的情况:group by count(dicstict)小表关联大表(???)
优化办法
重写partition类(==重置hash值????)???
取hash值时加入随机数或者设置序列
其他请参考
参考1 参考28 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任务之间的共享信息。
参考