Hive数据倾斜问题

  • 数据倾斜的现象:

    • 简单来说,就是一个reduce累死,其他reduce闲死
    • 用Hive算数据的时候reduce阶段卡在99.99%
    • 用SparkStreaming做实时算法时候,一直会有executor出现OOM的错误,但是其余的executor内存使用率却很低。
    • 各种container报错OOM
    • 读写的数据量极大,至少远远超过其它正常的reduce ,伴随着数据倾斜,会出现任务被kill等各种诡异的表现。
  • 数据倾斜的原因:

    • 数据分布不均匀,某个值有大量记录(null、空等情况),这种值的所有纪录已经超过了分配给reduce 的内存,无论你怎么样分区这种情况都不会改变. 当然这种情况的限制也非常明显, 1.内存的限制存在,2.可能会对集群其他任务的运行产生不稳定的影响.

    解决方法:1.增加reduce 的jvm内存(效果可能不好)
    2. 在 key 上面做文章,在 map 阶段将造成倾斜的key 先分成多组,例如 aaa 这个 key,map 时随机在 aaa 后面加上 1,2,3,4 这四个数字之一,把 key 先分成四组,先进行一次运算,之后再恢复 key 进行最终运算。

  • 从业务和数据上解决数据倾斜

我们能通过设计的角度尝试解决它。

(1)有损的方法:

找到异常数据,比如ip为0的数据,过滤掉

(2)无损的方法:

对分布不均匀的数据,单独计算

先对key做一层hash,先将数据打散让它的并行度变大,再汇集

(3)数据预处理;

5.平台的优化方法

1.join 操作中,使用 map join 在 map 端就先进行 join ,免得到reduce 时卡住;

2.能先进行 group 操作的时候先进行 group 操作,把 key 先进行一次 reduce,之后再进行 count 或者 distinct count 操作;

  1. 设置map端输出、中间结果压缩;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值