HIVE优化实践

本文探讨了HIVE的优化实践,包括JOIN多表关联的优化,如提前过滤、提前聚合和小表在前的策略。此外,还详细分析了数据倾斜的原因和解决方案,如调整reduce任务处理数据块的大小、启用负载均衡参数以及针对COUNT(DISTINCT)的替代方案,以应对数据不均匀分布的问题。
摘要由CSDN通过智能技术生成

一、JOIN多表关联

1.提前过滤——使用谓词下推

使用from子句方式的语句结构(即select子句);

注意:当多表关联使用inner join或left join时,主表的过滤条件可不用select子句的形式放在from后,而是放到最后的where条件里同样可使谓词下推生效。

2.提前聚合

在多表关联时涉及数据聚合,尽量将低粒度的子句提前聚合后再关联,而非发散关联后放到最后聚合。

3.小表在前

HIVE会自动将前面的小表直接放入缓存中,不用开启MAPREDUCE任务。

开启map join优化:

可将小表缓存在map端完成join过程,从而省略掉reduce端的工作。
set hive.auto.convert.join = true
默认是false
set hive.mapjoin.smalltable.filesize = 25000000;
默认值25M,设置使用这个优化的小表的大小

二、数据倾斜

原因:某个键下包含的数据量过多,导致处理该键下的数据的reduce任务负担过重,相对其他reduce任务过于耗时。

发生场景1:group by或join关联时导致Key值分布不均匀。

解决方案:

1.如果是因为有大量的NULL值和空值,则因提前过滤掉。

2.限制单个Reduce任务处理数据块的大小:

set hive.exec.reducers.bytes.per.reducer = 1000000000;
每个节点的reduce默认是处理1G大小的数据(从Hive 0.14.0开始,默认值变成了256M)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值