hive调优

1,解决数据倾斜

hive数据倾斜基本发生在group by,join,distinct等需要数据shuffle的操作中,这些过程都会根据key值汇集数据,由于key值过于集中,使得某一个reduce任务要进行大量数据汇集,这就会导致数据倾斜,结果会出现map100%,reduce长时间99%的现象

1,Group by 产生数据倾斜解决方法

  • 这个配置代表开启map端聚合,相当于使用combiner
set hive.map.aggr=true 
  • 这个选项设定为ture,会有两次MR,第一次会将通过key分组后的结果随机均匀的发给各个reduce进行部分聚合预处理,从而达到负载均衡的目的第二次MR会把预处理的结果再根据key值分好组给各个reduce完成聚合操作.
set hive.groupby.skewindata=true

2,HQL包含 join 产生数据倾斜解决方法

  • 小表join大表解决方法
    使用mapjoin(小表)先将表加载到内存中
    例如a为小标,b为大表
select  /*+mapjoin(a)*/* 字段 from a join b on a.c1=b.c1;
  • 当遇到关联字段为null的时候
    1,让该字段不参与关联
select columns 
from a left join b
on a.id is not null
and a.id=b.id 
union  all
select *
where a.id is null

2,给该字段随机分配key值

select columns 
from a left join b
on case when a.id is null
then concat('hive',rand())
else a.id end=b.id 

第二种方法比第一种方法效率高,因为是减小了IO和作业jobs数,所以效率更高

  • 当遇到关联字段数据类型不同的时候
    转换类型进行操作

3,HQL包含 count(distinct ) 产生数据倾斜解决方法
如果数据量很大 ,而distinct 会shuffle数据到一个reduce处理,就会导致数据倾斜
解决方法 distinct 用group by代替

4,HQL优化之map Reduce 产生数据倾斜解决方法
如果小文件很多,就需要把他们合并 可以使用 set hive.merge.mapfiles=true
如果单个文件稍大于配置文件block的大小,或者map计算量比较大
需要设置配置文件

set hive.mapred.map.tasks=num

来增加map的个数(num)

2,设计好的模型

hive 三大建模方法
范式建模

范式判断
第一范式属性是否具有原子性,是否可再分
第二范式非主属性对码是否存在部分依赖
第三范式非主属性对码是否存在传递依赖
BC范式主属性对码是否存在部分依赖和传递依赖

候选码是能唯一表示一个实体的最小属性集合,比如说学生,学号,成绩
学生和学号就是候选码
超码包含候选码
比如说{学生,学号,成绩}或者{学生,学号}
主码:候选码中选一个作为主码
非主属性:不包含候选码的属性列
主属性: 包含候选码的属性列
实体建模
维度建模

3,单个作业最优不如整体最优

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值