hive

Hive倾斜

  • 数据倾斜的原因
    Hive倾斜的原因很大部分是由于sql中的join语句与group by语句。
    原因:对于普通的join操作,会在map端根据key的hash值,shuffle到某一个reduce上去,在reduce端做join连接操作,内存中缓存join左边的表,遍历右边的表,依次做join操作。所以在做join操作时候,将数据量多的表放在join的右边。
    当数据量比较大,并且key分布不均匀,大量的key都shuffle到一个reduce上了,就出现了数据的倾斜。
  • 数据倾斜的优化
    1.如果是join 过程中出现倾斜应将此项设置为true。
    hive.optimize.skewjoin.compiletime=true;
    在进行两个表join的过程中,由于hive都是从左向右执行,要注意讲小表在前,大表在后(小表会先进行缓存)。

不影响结果可以考虑过滤空值

<property>
 <name>hive.optimize.skewjoin.compiletime</name>
 <value>false</value>
</property> 

2、如果是group by过程出现倾斜应将此项设置true。

hive.groupby.skewindata=true;

<property>
  <name>hive.groupby.skewindata</name>
 <value>false</value>
 <description>Whether there is skew in data to optimize group byqueries</description>
</property>

问题:为什么默认为false?

因为开启为true后,会至少开启两个MapReduce,执行时间比开启一个长,因此最好出现数据倾斜之后在开启。
hive.optimize.skewjoin.compiletime=true; 如果是join过程出现倾斜应该设置为true
此时会将join语句转化为两个mapreduce任务,第一个会给jion字段加随机散列
set hive.skewjoin.key=100000; 这个是join的键对应的记录条数超过这个值则会进行优化。

https://www.cnblogs.com/qingyunzong/p/8847597.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值