Hive Common Join VS Map Join

本文介绍了Hive中的两种Join方法:CommonJoin与MapJoin,并详细解释了各自的实现原理、优缺点及应用场景。CommonJoin通过shuffle过程连接多表,适用于任意规模的数据表;而MapJoin则通过将小表加载至内存中实现快速连接,适用于大表与小表的连接场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

2、举例

Table A
IDNAME
1zhangsan
2lisi
3wangwu
Table B
IDAGE
130
221
419

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值