大数据学习(四)一分钟明白hive数据倾斜

前言

简单来说,倾斜你可以理解为是分布不均。举个通俗的例子,有一份工作分给两个人,一个人分了99,另一个人分了1,虽然有了两个人,但整体效率还是被拉的很低。所以数据倾斜是什么呢?

一、数据倾斜到底是什么?

数据倾斜是指在原本应该并行处理的数据集中,某一部分的数据显著多于其它部分,从而使得该部分数据的处理速度成为整个数据集处理的瓶颈。

二、数据倾斜产生原因

a. map端:输入文件的大小不均匀

b. reduce端:key分布不均匀,导致分区不均匀

三、发生数据倾斜的常见场景以及解决办法

1. 大表和小表关联时

解决办法:多表关联时,将小表(关联键记录少的表)依次放到前面,这样可以触发reduce端更少的操作次数,减少运行时间

2. 大表和大表关联,其中某张大表 空值/0值较多

解决办法:

1.如果值本身是无效的,可以先剔除无效值,或者先处理一下赋予随机值

2.如果值本身是有效的,调整参数也是可以的

set hive.optimize.skewjoin = true

在运行时,会对数据进行扫描并检测哪个key会出现倾斜,对于会倾斜的key,用map join做处理,不倾斜的key正常处理

set hive.skewjoin.key = skew_key_threshold (default = 100000)

在参数 hive.optimize.skewjoin=true 时, Hive的reuce 任务会在处理join key 的时候 判断其数量是否大于该 阈值,如果是将作为一个Skew Join 处理

3. group by

解决办法:

1.调整参数

hive.map.aggr=true (默认true)这个配置项代表是否在map端进行聚合,相当于Combiner。

hive.groupby.skewindata=true (默认false)

2.剔除脏数据

4. hiveQL中包含count(distinct )时

count(dinsct  )非常耗能,不建议这么写

解决方式:使用sum...group by代替。如select a,sum(1) from (select a,b from t group by a,b) group by a

四、总结

未需待完,如果错误,请各位指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值