千锋教育-做有情怀、有良心、有品质的职业教育机构
MapJoin 会生成两个Task, 首先启动一个任务扫描小表,生成HashTable数据结构文件,然后加载进分布式缓存 DistributeCache 中,第二个 Task 会扫描大表,然后根据大表中每一条数据中的关联字段去和DistributeCache 中的小表对应的 HashTable 做关联,并直接输出结果,因为没有 Reduce 阶段,所以输出的文件个数和 Mapper 的个数一致。
-- Hive 0.11 前必须使用MAPJOIN标识显示启动该优化操作,列子如下
SELECT /*+ MAPJOIN(smalltable)*/ .key,value
FROM smalltable JOIN bigtable ON smalltable.key = bigtable.key
-- Hive 0.11 后,Hive默认启动优化,两个参数
hive.auto.convert.join = true -- 默认为true,表示默认开启mapjoin
hive.mapjoin.smalltable.filesize=25M -- 默认25M,也就是如果表的大小小于此值就会被加载进内存中。
相关推荐