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的主要内容,如果未能解决你的问题,请参考以下文章

hive高级操作(优化,数据倾斜优化)

Hive数仓-数据倾斜优化

大数据面试题:Hive优化措施

HIVE优化和数据倾斜合并小文件

大数据面试题----HIVE的调优及数据倾斜

Hive Join 分析和优化