Hive性能优化

hive配置角度优化:

(1)列剪裁

hive在查询时,只查询用到的列

(2)分区裁剪

hive在查询时将分区放入子查询中查询更加高效,可以减少读入的分区数目

(3)join优化

在编写带有join的语句时,将条目少的放在join操作符的左边,因为在reduce阶段,位于join操作符左边的数据会被加载到内存,载入条目较少的表,可以减少oom,所以对于同一个key来说,对应的value值小的放前,大的放后,这便是小表放前原则。

(4)map join操作

join操作在map阶段进行,不在需要reduce

(5)group by 操作

map端部分聚合

事实上并不是所有的聚合操作都需要在reduce端进行,很多聚合操作都可以现在map端进行部分聚合,然后reduce端得出最终结果。

这里需要修改的参数为:

  hive.map.aggr=true(用于设定是否在 map 端进行聚合,默认值为真) hive.groupby.mapaggr.checkinterval=100000(用于设定 map 端进行聚合操作的条目数)

  • 有数据倾斜时进行负载均衡

  此处需要设定 hive.groupby.skewindata,当选项设定为 true 是,生成的查询计划有两 个 MapReduce 任务。在第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个 reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 Group By Key 有可 能分发到不同的 reduce 中,从而达到负载均衡的目的;第二个 MapReduce 任务再根据预处 理的数据结果按照 Group By Key 分布到 reduce 中(这个过程可以保证相同的 Group By Key 分布到同一个 reduce 中),最后完成最终的聚合操作。

(6)合并小文件

  我们知道文件数目小,容易在文件存储端造成瓶颈,给 HDFS 带来压力,影响处理效率。对此,可以通过合并Map和Reduce的结果文件来消除这样的影响。

  用于设置合并属性的参数有:

  • 是否合并Map输出文件:hive.merge.mapfiles=true(默认值为真)
  • 是否合并Reduce 端输出文件:hive.merge.mapredfiles=false(默认值为假)
  • 合并文件的大小:hive.merge.size.per.task=256*1000*1000(默认值为 256000000)

(7)无效id在关联时的数据倾斜问题

(8)数据类型不同关联时产生的数据倾斜问题

把数据类型转换成字符串类型

转载于:https://www.cnblogs.com/18800105616a/p/11475506.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值