Hive Common Join VS Map Join

来源:互联网 发布:淘宝提问回答能删除吗 编辑:程序博客网 时间:2024/05/16 13:04

以下是个人理解,如有偏差,望大家多多指点!

一、Common Join(也称之为shufflejoiin/reducejoin)
1、Common Join图解
这里写图片描述
a>首先会启动一个Task,Mapper会去读表HDFS上两张X/Y表中的数据
b>Mapper处理过数据再经过shuffle处理
c>最后由reduce输出join结果

2、举例

Table A ID NAME 1 zhangsan 2 lisi 3 wangwu Table B ID AGE 1 30 2 21 4 19

a>mapper读取A/B表数据
A表
<1,(zhangsan)>
<2,(lisi)>
<3,wangwu>
B表
<1,(30)>
<2,21>
<4,19>
b>shuffle处理map结果
<1,(zhangsan,30)>
<2,(lisi,21)>
<3,(wangwu)>
<4,(19)>
c>reduc输出结果
1,(zhangsan,30)
2,(lisi,21)
3,(wangwu)
4,(19)
3、缺点
1、存在shuffle过程,效率低
2、每张表都要去磁盘读取,磁盘IO大

二、 Map Join
1、 Map Join图解
这里写图片描述

a>mapjoin首先会通过本地MapReduce Task将要join的小表转成Hash Table Files,然后加载到分布式缓存中
b>Mapperh会去缓存中读取小表数据来和Big Table数据进行join
c>Map直接给出结果

2、优点
没有shuffle/Reduce过程,效率提高

3、缺点
由于小表都加载到内存当中,读内存的要求提高了

三、通过执行计划来判断是何种Join方式
1、通过explain关键字查看join方式,mapjoin是没有Reduce过程的。

explain select  e.empno, e.ename, d.dname from emp e join dept d on e.deptno=d.deptno;

2、参数
hive.auto.convert.join (默认值false)参数控制是否Reduce 端的 Common Join 转化为 Map Join
所以测试Map Join需要将此参数设置为true

set hive.auto.convert.join=true;
原创粉丝点击