hive优化

一原理:

        hive根据计算引擎有

        mapreduce:转换为mr任务,分成map阶段,reduce阶段。中间有shuffer

        spark:转换为sprak的任务,基于RDD,分成一个一个的stage执行

        Tez:HADOOP2.x的重要引擎、把map和reduce拆成一个个的单元,可以随意组合这些单元

二思路:

        1.减少数据量

        2.join/group避免数据倾斜,避免有shuffer

        3.根据文件大小,资源情况,合理设置参数。

三对应操作:

       一.减少数据量

        1.分区裁剪,列裁剪

                设置分区。(静态分区和动态分区)

                不要select *

        2.谓词下推(where和join的条件下推)

        两表join,关联和where的限制都会下推到两个表里面。

        两表full join。关联和where的限制,都不会下推到两个表里面

        left/right join。where 中的条件会下推到主表中,但不会下推到副表中。on的条件会下推到副表中,但是不会下推到主表中

        3.嵌套查询。先在查询里面过滤好数据

        4.小文件太多,可以合并一下小文件

        二.join/group 优化。

        1.group by代替distinct。避免只有一个reduce

        2.join的时候大表和小表关联。使用mapjoin。小表的大小是否满足条件(默认25MB)。注意hdfs上面的大小是压缩后的

        3.join大表和大表关联。使用bucketjoin。需要表都是分桶表,join字段是分桶的字段。大表的分桶是小表分桶的整数倍。

        4.数据倾斜。

        group引起的数据倾斜。设置参数在map端先预聚合,再reduce端聚合(思想也是加盐去盐)

        join引起的数据倾斜。

                1.join的一张表有很多null值。给null值做一个随机的无意义值

                2.join的一张表的数据本身的key分布不均匀,可以把key单独拿出来,或者说说关联的时候用随机值关联,然后后面再进行一层汇总。

        5.多个表相同key的join只有一个job。

        6.可以先union再关联

        7.join时:不同数据类型关联产生数据倾斜

                比如两个表联接,联接的字段是userid,一个表的userid是string类型,一个表的是int类型,那这样默认按照int来计算哈希的话,那么string类型的都会被分到同一组,易发生数据倾斜

        三调整参数

        1.hive.map.aggr = true

        会先在map端聚合

        2.调整map或者reduce的个数

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值