数据倾斜

9 篇文章 0 订阅
7 篇文章 0 订阅

产生原因:shuffle过程中部分key占比过大,导致计算集中到个别reducer或者executor上,拖慢了整体计算时间。

解决方法:

1、过滤少数导致倾斜的key:shuffle前将这些key排除掉,不对其进行计算。(hive的where字句,spark的filter)

2、提高shuffle操作的并行度:增加reducer数目、spark中给shuffle算子传入并行度参数,旨在减少每个计算单元分配到的key

3、随机前缀二次聚合法:对key加随机数前缀进行一次聚合,对结果去除前缀后再进行二次聚合

(在hive中set hive.groupby.skewindata=true;就是用二次聚合解决count(distinct) 的倾斜问题)

4、广播小表法:跳过shuffle直接达到join效果:broadcast实现mapper端join

5、拆分join(原理类似于分桶表):大表和大表关联时,拆分成并行的多个join,再将结果union all。例如将北京的账户和北京的现金join,其他分公司的账户和其他分公司的现金join,再将结果合并。

6、组合法:方法5中,对拆分出的倾斜部分再使用上述方法2/3/4。

https://blog.csdn.net/qq_35394891/article/details/82261571

 

集群加节点负载均衡:

#启动数据均衡,阈值 5% (不加即为默认的10%)

$HADOOP_HOME/bin/start-balancer.sh –threshold 5

#停止数据均衡

$HADOOP_HOME/bin/stop-balancer.sh

 

hive优化==================================================================

1、按日分区、按关联键分桶

2、尽早使用where等限制结果集大小,优先放到子查询中

3、拆分查询,大key与小key分开关联,大key采用map端join

count(distinct) 很容易出现倾斜问题,需在hive中set hive.groupby.skewindata=true;使用二次聚合的方式解决。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值