hive的优化

本文详细介绍了Hive的性能优化方法,包括避免在大数据量下使用count(distinct),理解order by与sort by的区别,减少job数量,合并小文件,列裁剪与分区裁剪,优化JOIN和GROUP BY操作,以及解决数据倾斜问题。通过这些策略,可以显著提升Hive查询的效率和性能。
摘要由CSDN通过智能技术生成

1.数据量较大的情况下慎用count(distinct name)

问题:使用disticnt函数,所有的数据只会shuffle到一个reducer上,导致reducer数据倾斜严重易造成数据倾斜,
比如:男UV,女UV,淘宝一天30亿的PV,如果按性别分组,分配2个reduce,每个reduce处理15亿数据。
优化:建议使用group by 字段,分组之后再对该字段做次数统计;

hive去重有几种方法?distinct 、 group by

row_number 开窗函数 分组排序

pv 页面访问量
uv 用户访问量
vv 访客量 根据session

2.order by全局排序 & sort by “局部有序”(分区内部排序)

(1).order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)
只有一个reducer,会导致当数据输入规模较大时,需要较长的计算时间,影响效率.
如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,
原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。
(2).如果用sort by进行排序,并且设置mapred.reduce.tasks>1, 则sort by只保证每个reducer的输出有序&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值