HQL数据倾斜解决方法总结

      近来,求职数据分析师常被问到:数据倾斜如何调优?对于经常使用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读写和网络传输,提高效率)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值