Hive中join的三种方式

一.common join

 common join也叫做shuffle join,reduce join操作。适用于两个table的大小相当,但是又不是很大的情况下使用。具体流程就是在map端进行数据的切分,一个block对应一个map操作,然后进行shuffle操作,把对应的block shuffle到reduce端去,再逐个进行联合。

缺点:容易产生数据倾斜,大数据量下性能不好

二.map join

mapJoin的主要意思就是,当join的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去,然后再对比较大的表格进行map操作。join就发生在map操作的时候,每当扫描一个大的table中的数据,就要去去查看小表的数据,哪条与之相符,继而进行连接。这里的join并不会涉及reduce操作。

缺点:小表不能太大,吃内存

三.SMB(Sort-Merge-Buket) Join

smb是sort  merge bucket操作,首先进行排序,继而合并,然后放到所对应的bucket中去,bucket是hive中和分区表类似的技术,就是按照key进行hash,相同的hash值都放到相同的buck中去。在进行两个表联合的时候。我们首先进行分桶,在join会大幅度的对性能进行优化。也就是说,在进行联合的时候,是table1中的一小部分和table1中的一小部分进行联合,table联合都是等值连接,相同的key都放到了同一个bucket中去了,那么在联合的时候就会大幅度的减小无关项的扫描。
set hive.auto.convert.sortmerge.join=true

set hive.optimize.bucketmapjoin=true;

set hive.optimize.bucketmapjoin.sortedmerge=true;

在执行任务时,可以通过设置相关参数,手工选择join方式

猜你喜欢

转载自blog.csdn.net/sinat_17697111/article/details/84323218