- 一、项目场景
- 二、问题描述
- 三、原因分析
- 四、解决方案
一、项目场景
系统版本: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 语句之前,先为 map 和 reduce 端设置参数如下:
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



