我使用hadoop 2.0.5(alpha)运行相对较大的作业,遇到了以下错误:
容器[pid=15023,containerid=container\u 1378641992707\u 0002\u 01\u 000029]运行超出虚拟内存限制。当前使用情况:使用492.4 mb的1 gb物理内存;使用了3.3 gb的2.1 gb虚拟内存。杀人容器。
然后我了解了这两个参数:
yarn.nodemanager.vmem-pmem-ratio属性,默认设置为2.1。
yarn.app.mapreduce.am.command-opts,默认设置为-xmx1024mb(=1gb)。
这就解释了上面标注的限制。
将这些参数设置为更高的值确实有帮助,但后来我发现了这个参数:yarn.app.mapreduce.am.resource.mb,默认设置为1536。
从hadoop的默认xmls中给出的描述中,我不能很好地分辨出3和3之间的区别,也不知道我应该如何通过优化来正确地设置它们。
如能提供解释或良好的参考,将不胜感激
2条答案
按热度按时间zujrkrfu1#
@twid给出的答案模棱两可。根据这里的官方文件:
yarn.app.mapreduce.am.resource.mb
指定“appmaster先生需要的内存量。”
换句话说,它指定用于运行应用程序主机的容器需要多少内存,这与用于运行Map器/还原器的容器无关。
g52tjvyc2#
正如我们所知,yarn是hadoop生态系统中管理资源的新架构。
vmem-pmem-ratio属性:是定义虚拟内存与可用物理内存的比率,这里是2.1意味着虚拟内存的大小将是物理内存的两倍。
yarn.app.mapreduce.am.command-opts:in-yarn applicationmaster(am)负责获取必要的资源。所以这个属性定义了运行am本身需要多少内存。不要把它和nodemanager混淆,nodemanager是执行作业的地方。
yarn.app.mapreduce.am.resource.mb:此属性指定为特定作业选择资源的条件。这里给出的1536意味着任何具有相同或更多可用内存的节点管理器都将被选择来执行作业。