Hive skew join

  • Post author:
  • Post category:其他


Hive在reduce的过程中会将相同的key放入同一个reduce处理,当某个key的数据量过大时就会发生数据倾斜。

两个表进行join时,数据量大的key称为skew key,此时可以通过以下参数对这种情况进行优化:

1.hive.optimize.skewjoin=true (default :false)

该参数通过在Hive 对物理执行计划优化时 ,添加一个Map Join用于处理Skew Key ;

目前该优化方案还不支持outer join,并且数据倾斜的key出现在join的最后一张表时不会触发skew key优化,如:select a.* , b.* from table_a a join table_b b on

a.id

=

b.id

,如果倾斜key 在表b的时候是不会被优化成skew join的, 如果出现在表 a 则会;


2.hive.skewjoin.key = <判断key为Skew key 的阈值>  (default : 100000)


在参数 hive.optimize.skewjoin=true 时, Hive的reuce 任务会在处理join key 的时候 判断其数量是否大于该 阈值,如果是将作为一个Skew Join 处理


3.hive.skewjoin.mapjoin.map.tasks = <用于处理skew join的map join 的最大数量>  (defaul : 10000)

参考博客:

Hive优化—skew join优化原理详解_看得出的就是的博客-CSDN博客



版权声明:本文为qq_28786285原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。