1. 错误
在进行hive对任务的mapred过程的时候,时常出现如下的错误:
[2019-09-30 03:18:56.709]Container [pid=11578,containerID=container_1569779921172_0010_01_000005] is running 261372416B beyond the ‘VIRTUAL’ memory limit. Current usage: 106.1 MB of 1 GB physical memory used; 2.3 GB of 2.1 GB virtual memory used. Killing container.
(物理内存够用,但虚拟内存超过限制)
2.原因
hive启动堆栈内存不足
3. 解决办法
方法1(推荐):
(1)在hadoop下的etc/hadoop中的配置文件hadoop-env.sh中修改如下配置:
修改为:
export HADOOP_CLIENT_OPTS=“-Xmx2048m $HADOOP_CLIENT_OPTS”
(2)在hive下的bin目录下的配置文件hive-config.sh中修改如下配置:
修改为:
export HADOOP_HEAPSIZE=${HADOOP_HEAPSIZE:-2048}
方法2: 直接修改虚拟机的内存,有2G扩大4G,然后重启服务。
如果不生效,使用方法2。
方法3:
修改mapred-site.xml文件:添加以下配置
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx1024M</value>
</property>
其中的数值1536MB
是根据机器的物理内存2GB*0.75=1536MB。
重启集群服务即可解决。