9.3.4 map join
如果不指定 MapJoin
或者不符合 MapJoin
的条件,那么 Hive 解析器会将Join
操作转换成Common Join
,即:在 Reduce 阶段完成 join
。容易发生数据倾斜。
可以用 MapJoin
把小表全部加载到内存在map
端进行join
,避免reducer
处理。
MapJoin是 Hive 的一种优化操作,其适用于小表 JOIN 大表的场景,由于表的 JOIN 操作是在 Map 端且在内存进行的,所以其并不需要启动 Reduce 任务也就不需要经过shuffle 阶段,从而能在一定程度上节省资源提高 JOIN 效率
// 是否开启 MapJoin
set hive.auto.convert.join = true;
// 大表小表的阈值设置(默认25M一下认为是小表):
set hive.mapjoin.smalltable.filesize=25000000;