Hive Map side join AND Reduce side join

map-side join:

map-side join顾名思义就是join的动作在map阶段完成, 不必动用reducer. 但是要用上map-side join必须满足的条件是两个join的表, 必须有一个足够小. 小到可以使用 Hadoop的 DistributedCache 功能把小表缓存到各个执行节点上去. 而大表使用各个mapper来和分布缓存中的小表做具体的join.

默认小于25Mb的表就会被视为小表, 并进行map-side join.

set hive.mapjoin.smalltable.filesize;

而是否开启map-side join的优化, 则取决于:

set hive.auto.convert.join;
如果在join的两张表中都设置过Bucket, 且Bucket number一致或是倍数关系, 那么还可以进一步优化, 只要小表的最大的bucket不超过阈值(默认25Mb)就可以使用map-side join了, 每次只把一个Bucket放入分布式缓存, 并去大表相应的Bucket中找匹配的记录来完成 join.


reduce-side join:

当join的表都没有满足size要求后(或者没有开启hive.auto.convert.join), 就不能使用 map-side join, 系统就会执行reduce-side. 这种join方式性能相比map-side颇低.

它的作法是将要join的列(若在几列上join的话就把几列合并为一列)作为mapper的键值对的key, 同时增加一个Tag列用于标记数据的来源(左表还是右表), 将相同的key的数据传入同一个reducer做笛卡尔积.

reduce-side join的优化方式是将小表join列上值 通过分布式缓存, 放到各个节点上去, 在map阶段对大表进行一次filter. 如果小表join列上值 都太大的话, 就用BloomFilter来做 filter. 对于一个值, 如果BloomFilter返回false, 那么它必定不在筛选范围之内.


参考链接: 

http://blog.sina.com.cn/s/blog_6fccaaeb0102vx87.html

https://www.cnblogs.com/shudonghe/p/3260201.html

http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2842821.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱知菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值