Hive虚拟内存溢出报错:2.9GB of 2.1GB virtual memory used. Killing container.解决办法

Posted Z.Q.Fengᯤ⁵ᴳ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive虚拟内存溢出报错:2.9GB of 2.1GB virtual memory used. Killing container.解决办法相关的知识,希望对你有一定的参考价值。


一、项目场景

系统版本:Ubuntu18.04
Hadoop版本:Hadoop3.2.2(分布式安装)
Hive版本:Hive3.1.2


二、问题描述

在使用 Hive 执行 select 语句时,出现了 job 分配报错:

...
ERROR exec.Task: Ended Job = job_1639344121150_0015 with errors
ERROR exec.Task: Error during job, obtaining debugging information...
...
Container [pid=20022,containerID=container_123123432324_0015_01_000005] is running 78348374834B 
beyond the 'VIRTUAL' memory limit. Current usage: 247.6 MB of 1GB physical memory used; 
2.9GB of 2.1GB virtual memory used. Killing container.
...

三、原因分析

可以看到,2.9GB of 2.1GB virtual memory used. ,2.1GB 的虚拟内存分配了 2.9GB 的任务,导致内存溢出,容器自动被 killed 掉了。这里的容器具体是 map 容器还是 reduce 容器我们暂且不管它。


四、解决方案

在执行 Hive 语句之前,先为 mapreduce 端设置参数如下:

set mapreduce.map.memory.mb=4096;
set mapreduce.map.java.opts=-Xmx3276M;
set mapreduce.reduce.memory.mb=4096;
set mapreduce.reduce.java.opts=-Xmx3276M;

注:java.opts 是 memory.mb 的 80% 左右,根据内存溢出时提示的内存大小(例如:Current usage: 2.0 GB of 2 GB physical memory used)进行增大内存,增大的最小单位是1GB。

接着再尝试执行我们的 select 语句。参考博客:https://blog.csdn.net/weixin_33581873/article/details/111948418

以上是关于Hive虚拟内存溢出报错:2.9GB of 2.1GB virtual memory used. Killing container.解决办法的主要内容,如果未能解决你的问题,请参考以下文章

2.1 自动内存管理机制--Java内存区域与内存溢出异常

Spark中的虚拟内存是如何计算的?

java虚拟机--java内存区域与内存溢出异常

docker安装与配置

JVM-Java内存区域与内存溢出异常

JVM-Java内存区域与内存溢出异常