Hive10:Hive数据倾斜的解决方案

37 篇文章 0 订阅 ¥59.90 ¥99.00
本文分析了一种SQL语句导致Hive数据倾斜的问题,由于key=KEY001的数据占比过大,直接分组会导致计算效率低下。解决方案包括参数调节如启用map端聚合和倾斜数据负载均衡,以及SQL语句优化,如用sum() group by替换count(distinct),或对倾斜数据单独处理后再union。
摘要由CSDN通过智能技术生成

一、一个SQL语句分析

SELECT a.Key
    , SUM(a.Cnt) AS Cnt
FROM (
    SELECT Key
        , COUNT(*) AS Cnt
    FROM TableName
    GROUP BY Key,
        CASE
            WHEN Key = 'KEY001' THEN Hash(Random()) % 50
            ELSE 0
        END
) a
GROUP BY a.Key;

解释:这个SQL其实是一个解决数据倾斜的SQL

先看里面的select语句,里面的select语句其实是根据key进行分组,但是这个key对应的数据存在数据倾斜,key=KEY001的数据占了整份数据的90%,所以直接针对key进行分组肯定会出现数据倾斜,应该计算效率,所以在这里就实现了曲线救国,先把key=KEY001的数据打散,分成50份,进行局部聚合。

最后再通过外面的select进行全局的聚合,这样就可以显著提高计算效率

二、Hive数据倾斜的解决方案

1、触发Hive数据倾斜几种情况

关键字			情形										后果
join			其中一个表较小,但是key
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值