HQL数据倾斜解决方法总结

本文深入探讨了数据倾斜现象在大数据处理中的成因,主要由count(distinct*)、groupby和join操作引起。针对此问题,文章从数据层面、代码层面及参数调整三个方面提出了具体的优化策略,包括异常数据过滤、数据hash打散、代码重构和参数优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      近来,求职数据分析师常被问到:数据倾斜如何调优?对于经常使用HQL处理大数据的同学,这个问题并不陌生:任务进度长时间维持在99%,而查看监控页面,会发现只有某几个reduce子任务尚未完成,十分诡异。

      要解决数据倾斜这个问题,我们需要先了解下数据倾斜产生的原因是什么?一般由于以下三个操作:count(distinct *), group by , join引起的,导致某个reducer处理的数据过多引起处理时间非常耗时。

      因此解决调优的方式可以从3方面入手尝试:

      1. 数据层面

  •       有损方法:找到异常数据,符合业务场景的前提下,直接过滤
  •       无损方法:对分布不均匀的数据,先对key做一层hash,先将数据打散增大并行度,再汇聚

 

      2. 代码方面:

  •        使用sum() group by 替代coun(distinct )
  •       显式使用mapjoin:/*+mapjoin(x)*/
  •       避免多表同时join,使用临时中间表过渡

 

      3. 参数方面:

  •       负载均衡:hive.groupby.skewindata=true
  •       map端聚合:hive.map.aggr = true
  •       增加reduce 个数: hive.exec.reducer.max = / mapred.reduce.tasks =
  •       采用压缩:hive.exec.compress.output = true /mapredu.output.compress = true (这个方式不完全是解决数据倾斜问题,减少IO读写和网络传输,提高效率)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值