美文网首页
Hive 数据倾斜

Hive 数据倾斜

作者: 一个神经质的工程师 | 来源:发表于2019-09-30 17:19 被阅读0次

    现象:任务卡在map 100% reduce 99%,分布式计算时,

    优化目标:使map的结果更均匀的分布到reduce中去

    SQL调节

    1.join的关联字段选取分布均匀的表作为驱动表,同时可以尽可能的裁剪表,使关联的集合变小。当大小表关联时,使小表先进内存;当大表关联大表时,考虑把空值变成一个随机串concat('hive',rand()),把倾斜数据分布到不同的reduce上。

    2.使用group by代替distinct,distinct会将所有的distinct字段放在同一个reducer里面,即存在数据倾斜,而group by会分散到多个reducer里面,避免了某个节点负荷过高而其他节点无负荷的情况

    当group by的不同分组的数据量差异很大时,可以设置参数

    set hive.map.aggr=true 表示是否在map端聚合

    set hive.groupby.skewindata=true 均衡reduce的处理量

    3.over函数会导致数据倾斜,尽可能的减少数据量

    4.set hive.auto.convert.join=true; 适用于大表关联小表时,将小表自动放入内存中

       set hive.mapjoin.smalltable.filesize = 25000000;  默认25m

    show create table 查看表大小

    5.set hive.optimize.skewjoin = true; 

       set hive.skewjoin.key = skew_key_threshold (default = 100000)

       hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你(处理的总记录数/reduce个数)的2-4倍都可以接受

    6.大表与小表关联时,使用/*+ mapjoin(表名)*/将小表放入内存

    还可参考 https://www.jianshu.com/p/c5a74ed62fb9

    相关文章

      网友评论

          本文标题:Hive 数据倾斜

          本文链接:https://www.haomeiwen.com/subject/ijoixctx.html