Hive优化整理

写本文的目的是为了从本文开始,让自己养成写博文的习惯,也将知识一点点的沉淀下来,自己回头看的时候方便,能为其他人提供一些帮助更好。同时也会整理一些面试题。

hive优化

1、两表join,条件写在的on后面和where后面什么区别?
1. left join,不管on后面跟什么条件,左表的数据都会列出来,右表中关联不上的会置空,因此要想过滤掉脏数据,需把条件放到where后面
2. inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。
2、distinct 和 group by有什么区别?在哪种情况下使用group by性能会更优?
distinct会将去重字段放到一个reduce中,数据量大的时候效率低
group by,shuffle时会根据group by后面的字段进行分组,分发到多个reduce中,提升效率
因此,在大数据量时用group by代替distinct()
3、group by时由数据中key的问题导致的数据倾斜怎么解决?
set hive.map.aggr=true (开启map端combiner),重复数据少的话,必要性不大
set hive.groupby.skewindata=true;//开启负载均衡。只能对单个字段聚合,控制生成两个MR,第一个MR的Map输出结果随机分配到Reduce中做部分聚合操作,相同的key可能分到不同的reduce中,达到均衡作用;第二个MR再根据预处理好的数据按照group by key分布到一个reduce中,最终完成聚合操作。
4、小表和大表关联
1、将小表写在前
2、set hive.auto.convert.join =  true ; //将小表刷入内存中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值