a表:
id name age
b表:
id course sex
a和b的join
select * form a join b on a.id = b.id
reduce 端的join就是join过程在reduce端做
伪代码
public class ReduceJoin{
static class MyMapper extends Mapper<><><><>{
@override
protected void setup(){}
//通过上下文对象,map方法之前读取到文件名
@override
protected void map(){}
//加标记,判断是从a来还是从b来,不同的文件相同的key输出map的格式不同
@override
protected void reduce(){
if(lsit1.size>0&& list2.size>0){
//两个集合都有数据才能关联上
//双重for循环进行两个集合的拼接
}
}
//把相同的key做关联
//创建两个list,for循环做判断,如果标签a开头的加到list1,b开头的加到list2
}
}
缺点:
1.容易发生数据倾斜
2.reduce本身并行度不高,性能不高(个数datanode*0.95)
3.reducejoin需要结合list,本身存在性能瓶颈