Hive数据倾斜优化:两个亿级表join
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive数据倾斜优化:两个亿级表join相关的知识,希望对你有一定的参考价值。
参考技术A 原始查询:【现象】
出现reduce阶段一直卡在99%的情况,猜测可能出现数据倾斜问题。
【验证猜测】
1、查看user表strmd5个数,6亿左右,做distinct之后,只有4.5亿。大约有1.5亿重复数据。
2、查看filter_log表strpicdownloadimgmd5个数,6亿左右,做distinct之后,只有5亿。大约有1亿重复数据。
3、如果一个key在user表和filter_log表中都重复出现1k次,两个表join,总数据量为1k*1k=100w,也就说这一个key的结果就有100w条。这还只是1k次,如果是10w呢?
利用row_number去重。
第一个子查询:
第二个子查询:
再做join。
【结果】:
原来6个小时都没查出来的join,现在25分钟就可以计算出结果了。
partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。
以上是关于Hive数据倾斜优化:两个亿级表join的主要内容,如果未能解决你的问题,请参考以下文章