hive中的join可以分为Map join与Reduce join(也叫Common join或Shuffle join),Map join是相对于Reduce join的一种优化。
什么是MapJoin
MapJoin是在Map阶段进行表之间的连接,而不需要进入到Reduce阶段才进行连接,
这样省去Shuffle和Reduce的过程,大大降低了Job的运行时间。
MapJoin的基本原理
简单来说:
先将小表加载到程序的内存中,再和Map出来的表进行join,从而加快join的执行速度。
MapJoin的相关参数设置
在hive0.7.0到0.10.0版本,参数 hive.auto.convert.join 默认是false
在hive0.11.0到之后的版本,参数 hive.auto.convert.join 默认是ture
可以在命令行工具中 set hive.auto.convert.join = ture 开启自动MapJoin转换
默认hive.mapjoin.smalltable.filesize = 25000000 默认小表最大25M
注意:
如果 set hive.auto.convert.join = ture 之后 MapJoin不起作用,可以尝试以下操作
hive.auto.convert.join = false
hive.ignore.mapjoin.hint = false
MapJoin适用的场景
1. 并不是所用场景都适合用MapJoin
2. 在表的join中要有一个小表,小表可以放在内存中而不影响性能
3. 需要进行不等值join操作