【数据倾斜】热点数据打散实践

在这里插入图片描述

本文阐述了一种离线数据处理中,数据倾斜打散热点key的思路,供大家参考

具体业务case

查询一段时间里各资源位上的去重用户数,逻辑表述如下

set stable.level = 5;
select pos_id,count(distinct user_id)
from xxxxxxx
where partition_date between '2023-11-01' and '2023-11-19'
group by 1

上述sql执行时间:
查询ID:745285720
查询状态:查询结束
提交时间:2023-11-20 12:53:04已提交2217秒
执行时间:2023-11-20 12:53:05已执行2217秒
其中shuffle阶段时长分布:

Min25th percentileMedian75th percentileMax Metric
Duration5s15s21s29s17 min
GC Time30.0 ms0.6s1s2s15s
Shuffle Read Size/RecordsNaN undefined/11653260208.1 MiB/11726798208.4 MiB/11746961208.7 MiB/11766420209.2 MiB/11869073
Shuffle Write Size/Records23.6 KiB/36124.1 KiB/36824.2 KiB/37024.4 KiB/37225 KiB/381

逻辑优化思路

pos_id中的某几个比如72的用户量级较大,是热点key。给热点key增加后缀,将同一个posid的用户拆分成多组去count distinct计算UV,后缀的逻辑必须要确保相同用户分配给固定的组。然后再将posid的后缀去掉,将UV值做sum,得到每个posid的UV值。
逻辑表述如下

  select pos_id,
       sum(uv) as uv
  from (
    select split(pos_id_mod_user,'#')[0] as pos_id,
    uv
    from (
      select concat(pos_id,'#',mod(user_id,pos_id)) as pos_id_mod_user,
      count(distinct user_id) as uv
      from xxxxxxx
      where partition_date between '2023-11-01' and '2023-11-19'
      group by concat(pos_id,'#',mod(user_id,pos_id))
    ) as t1
  ) as t2
 group by pos_id

执行时间:
查询ID:745306136
查询状态:查询结束
提交时间:2023-11-20 13:25:44已提交1697秒
执行时间:2023-11-20 13:25:44已执行1697秒
shuffle阶段task耗时分布:

Min25th percentileMedian75th percentileMax Metric
Duration8s21s29s42s8.0 min
GC Time27.0ms0.3s0.8s2s19s
Shuffle Read Size/RecordsNaN undefined/11652122266.9 MiB/11725571267.3 MiB/11747132267.7 MiB/11766599268.2 MiB/11862435
Shuffle Write Size/Records8.6 MiB/6528508.6 MiB/6544558.6 MiB/6548468.6 MiB/6552208.7 MiB/656641

结果分析

可以观察到,优化后的shuffle阶段,数据倾斜明显缓解(task最长耗时从17min降低到8min)。且经过比对,新旧逻辑的结果完全一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值