HIVE数据倾斜

数据倾斜的定义

由于各种原因造成数据分布不均匀,造成数据大量集中在一点,造成数据热点。

数据倾斜产生的现象
  • 执行任务的时候,任务进度卡在99%,打开监控查看,只有一个或N个reduce任务处于运行未完成的状态。 这是因为处理的数据数量相比较其他reduce节点数据要大
  • 单一reduce处理数据量比平均reduce处理的数据量要大,通常是3倍甚至更多。处理时间也大于平均时长。
数据倾斜的情况

在这里插入图片描述

数据倾斜的原因
  • Key 分布不均匀
  • 业务本身对某些维度需求较集中
  • 建表的时候未考虑周到
  • 某些SQL语句执行的时候,底层结构会造成数据倾斜
数据倾斜的解决方案
MAP端聚合

–Map端部分聚合,相当于Combine
hive.map.aggr= true;

–有数据倾斜的时候进行负载均衡
hive.groupby.skewindate=true;

解释 :默认为true的时候,查询计划会有两个MR,第一个MR执行的时候,Map操作会将结果数据随机分到Reduce中,每个Reduce做部分聚合操作,并输出结果
**作用:**可以将相同的key值放在不同的reduce端处理
第二个MR job的作用是,是将第一个 MR job散落在不同的reduce端的数据聚合起来。完成最后的聚合操作。

关于数据负载均衡方面的调优操作
如何进行 JOIN

关于驱动表的选取,使用key值分布平均的表作为基准表,在进行JOIN操作的时候,可以做基准表进行列裁剪和filter 操作,达到基准表数据量变少的效果。

JOIN的情况:

  • 大小表相互JOIN, 使用 map join 使得小表先进内存。
  • 大表JOIN大表,将key为null值的数据变成一个字符串+随机数,反正null值也关联不上null值,处理后并不影响最终结果。
  • count distinct 大量相同特殊值
    可以事先将空值过滤掉,等到最终结果+1处理
  • group by 维度过小
    维度过小导致产出数据 <data,count()> 值过多,可以使用 group by + sum的方式
    替换 count (distinct )操作。
  • 特殊情况特殊处理
    在不更改逻辑的前提下,将造成倾斜的数据单独拿出来做处理,最后在 union 回去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值