HQL数据倾斜解决方法总结

2020-08-23  本文已影响0人  ArnoChanszu

      近来,求职数据分析师常被问到:数据倾斜如何调优?对于经常使用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读写和网络传输,提高效率)

上一篇 下一篇

猜你喜欢

热点阅读