目录
1、MapReduce编程套路(有一张图重要)
1、MapReduce编程中map的输出的key
2、map输入的key如何设计?
2、maptask的并行度
1、什么是maptask
2、maptask的决定因素——切片
3、底层实现原理
4、面试题:切片和切块的区别?
5、修改切片的大小
3、MapReduce中自定义类
1、Hadoop中的内置类型
2、自定义类的实现原理
3、编写自定义类
4、MapReduce程序的运行模式
1、打jar包方式
2、本地运行
3、本地运行——提交YARN上
5、MapReduce案例包
1、位置
2、运行
6、排序
1、默认情况下会按照map输出的key进行排序
2、需求1:对wc的结果进行排序 按照单词出现的次数进行倒序排序
3、排序的原理解析
4、需求2:将统计结果按照先按照上行流量在按照总流量倒序排序
7、combiner
1、是什么?
2、有什么用?适用场景?
3、为什么?
4、如何用?
8、分区—reducetask的并行度
1、概念
2、有什么用?
3、为什么?
4、如何使用?
5、自定义分区
9、join:hql——>sql
1、reducejoin
数据倾斜
2、mapjoin
10、分组
1、默认情况
2、案例:求每门课程平均分的前五名同学
3、分组的原理解析
4、自定义分组
11、shuffle的原理解析(有一个张图重要)
12、MRAppMaster
13、多job串联
14、倒排索引
1、概念
2、案例
15、全局计数器
1、是什么
2、默认情况
3、自定义计数器
4、应用场景
16、MapReduce的输入
1、默认输入
2、需求:小文件合并,默认的输入一行一行的数据输入,目前的需求需要一次性读取一个小文件
3、自定义输入
4、自定义输出
17、注意事项
reduce端的values的两个坑:
1.只能循环遍历一次
2.values另外的坑:key values 只有一个对象
对象重用
List<Stu> list=new list;
for(Stu s:values){
重用的一个对象
循环遍历到每一个对象相当于对同一个对象重新赋值属性
list.add(s);
}
list中所有的对象都是values的最后一个对象了
所有的values通用一个内存地址,循环遍历的时候 只是属性在变
如何解决:
每次循环遍历的时候将这个values中的对象重新赋值给新的对象
for(Stu s:values){
Student ss=new Student(s.getName());
list.add(ss);
}
练习作业
1、求5个文件(小文件),每个文件中放的都是单词,每一行多个单词,分割符\t。求这五个文件中的所有单词的出现的总次数
2、有5个文件 每一个文件中存储的都是数字 每行一个字这五个文件中所有数字的最大值
3、mr的wc写完
4、5个文件 每一个文件中存储的都是数字 每行一个字这五个文件中所有数字的最大值 用MR写一遍
5、题目--求学生成绩--普通版,链接:
6、流量案例,链接:
7、题目--3--求学生成绩--增强版,链接:
8、很多作业题目,单独进行整理