hive on spark 内存溢出

前端时间用hive改写了一个java mapreduce查询,由于用到了grouping sets,组合比较多,同时数据也比较大(每天1700万左右),需要对当月进行统计。每到下半月时,reduce阶段就经常报内存溢出错误。错误信息如下

Reducer preempted to make room for pending map attempts Container killed by the ApplicationMaster. Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143

 

之前的解决方案是简单粗暴的增加reduce数量来解决。但是到月底几天,reduce数量已经增加到20000个(小集群,9个节点),但是还是报错。什么很可能单个key需要的内存已经超出当前配置,已经无法再通过增加reduce数量来解决问题了。那么唯一的办法就增加reduce内存。

之前也有尝试过增加mapreduce.reduce.memory.mb参数大小,但是没有起作用。今天突然意识到,还需要再配置一个参数:mapreduce.reduce.java.opts。当前集群总共参数配置了1.5G,从之前的经验得知,这个值已经不能满足计算要求了。所以将以上两个参数都调到4G

set mapreduce.reduce.java.opts=-Djava.net.preferIPv4Stack=true -Xmx4294967296; -- 运行reduce任务的jvm参数
set mapreduce.reduce.memory.mb=4096;-- 设置reduce Container的容器大小

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值