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的容器大小

 

你可能感兴趣的:(hive)