1. 两个属性来设置该优化的触发时机:
1.hive.auto.convert.join=true (default :true),自动开启mapjoin优化
2.hive.mapjoin.smalltable.filesize 默认值为2500000(25M),通过配置该
属性来确定使用该优化的表的大小,如果表的大小小于此值就会被加载进内存中
a. 通过MapReduce Local Task,将小表读入内存,生成HashTableFiles上传至Distributed Cache中
b.每个Mapper从Distributed Cache读取HashTableFiles到内存中,在Map阶段直接进行Join,此时的map数由大表的数据量决定
2. set hive.ignore.mapjoin.hint=true (default :true),为true时注释方式不生效,为false 时注释方式生效,强行指定需要加入内存走mapjoin的表。
set hive.ignore.mapjoin.hint=true;
select /*+ mapjoin(table2) */ *
from table1
inner join table2 --小表,size 5M
on 1=1;