解决Hive内存溢出问题 2.1 GB of 2.1 GB virtual memory used. Killing container

第一次Hive报错:
java.lang.OutOfMemoryError: Java heap space
解决办法:通过在yarn-site.xml添加以下配置:


    yarn.scheduler.maximum-allocation-mb
    2048


    yarn.scheduler.minimum-allocation-mb
    2048


    yarn.nodemanager.vmem-pmem-ratio
    2.1


    mapred.child.java.opts
    -Xmx1024m

重启集群,再次执行hive语句,报如下错误:
2.1 GB of 2.1 GB virtual memory used. Killing container
解决办法:
1.通过在yarn-site.xml添加以下配置:


mapred.child.java.opts
-Xmx2056m

2.通过在yarn-site.xml添加以下配置:


mapreduce.cluster.map.memory.mb
-1


mapreduce.cluster.reduce.memory.mb
-1

再次分发配置,重启集群,Hive执行成功。
但有时会成功,有时又会报错:



异常分析:
在此前容器的最小内存和最大内存分别为:2048m和2048m,而map和reduce都没有配置,此时默认值均为2048m,也就是log中的“2.1 GB physical
memory used”。而由于使用了默认虚拟内存率(也就是2.1倍),所以对于Map Task和Reduce Task总的虚拟内存为都为2048*2.1=4G。而应用的虚拟内存超过了这个数值,故报错 。解决办
法:在启动Yarn是调节虚拟内存率或者应用运行时调节内存大小。
此时,再把容器的最大内存和最小内存调大分别是10000和3000,并单独把map和reduce的内存调到4000,这时运行成功,内存相关配置代码如下:


yarn.nodemanager.vmem-check-enabled
false



yarn.scheduler.maximum-allocation-mb
10000


yarn.scheduler.minimum-allocation-mb
3000



    mapreduce.reduce.memory.mb
    4000


    mapreduce.map.memory.mb
    4000


yarn.nodemanager.vmem-pmem-ratio
2.1


mapred.child.java.opts
-Xmx3080m


mapreduce.cluster.map.memory.mb
-1


mapreduce.cluster.reduce.memory.mb
-1

你可能感兴趣的:(解决Hive内存溢出问题 2.1 GB of 2.1 GB virtual memory used. Killing container)