hive数据倾斜

hive数据倾斜


  • 什么是数据倾斜

    • 数据倾斜主要表现在map/reduce程序执行时,reduce节点大部分执行完毕,但是又一个或者几个reduce节点运行很慢,导致整个程序的处理时间长,这是因为某一个key的条数比其他key多很多,这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完
  • 数据倾斜常见原因

    关键词情形后果解决方法
    join其中一个表较小,但是key集中分发到某一个或者几个Reduce上的数据远高于平均值小表在join左侧,或者使用mapjoin将小表加载到内存里
    join大表与大表,但是分桶的判断字段0或者空值过多这些空值都交由一个reduce处理滤掉空值,或者给空值分配随机的key值
    group bygroup by 维度过小,某值的数量过多处理某值的reduce非常耗时首先在map端聚合,最后在reduce端聚合
    count distinct某特殊值过多处理此特殊值的reduce耗时使用sum…group by 代替
  • 其他情形

    • set hive.map.aggr=true(默认开启) map段部分聚合,相当于combiner
    • set hive.groupby.skewindata=true(默认关闭) 有数据倾斜的时候进行负载均衡,当选项设定为true时,生成的查询计划会有两个MR Job.第一个MR job中,Map 的输出结果集合会随机分不到Reduce中, 每个Reduce做部分聚合操作,并输出结果,这样处理会使相同key值的数据可能被分发到不同的reduce中,从而负载均衡;第二个MR job 再根据预处理的数据结果按照group by key 分布到reduce中,最后完成最终的聚合操作
    • 单个文件大小稍稍大于配置的block块的大小,此时需要适当增加map的个数. set mapred.map.tasks个数
    • 文件大小适中,但map端计算量非常大,需要增加map个数 set mapred.map.tasks 个数 或者 set mapred.reduce.tasks 个数
    • 小文件过多,需要合并小文件.可以通过set hive.merge.mapfiles=true 来解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值