文档章节

hive运行报错running beyond virtual memory错误原因及解决办法

aibati2008
 aibati2008
发布于 2017/02/15 15:24
字数 792
阅读 237
收藏 0

问题:在hive中运行应用,出现了running beyond virtual memory错误。提示如下:

Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.

原因:运行的Container试图使用过多的内存,而被NodeManager kill掉了。
[摘录] The NodeManager is killing your container. It sounds like you are trying to use hadoop streaming which is running as a child process of the map-reduce task. The NodeManager monitors the entire process tree of the task and if it eats up more memory than the maximum set in mapreduce.map.memory.mb or mapreduce.reduce.memory.mb respectively, we would expect the Nodemanager to kill the task, otherwise your task is stealing memory belonging to other containers, which you don't want.

要解决这个异常,得熟悉yarn自身的虚拟内存管理规则,在Yarn平台中,CPU,内存,磁盘都被抽象成资源来自使用,管理资源的角色主要有Yarn Resource Manager (RM) 负责总的资源调度,然后每个节点上有Nodemanager 来监听守护资源,在具体到每一个应用上是通过Application Master (AM) container来给Map或Reduce任务来分配资源,具体的属性如下: 
(1)yarn.nodemanager.resource.memory-mb 
可分配的物理内存总量,默认是8*1024MB。 
(2)yarn.nodemanager.vmem-pmem-ratio 
每单位的物理内存总量对应的虚拟内存量,默认是2.1,表示每使用1MB的物理内存,最多可以使用2.1MB的虚拟内存总量。 

第二个属性,比率的控制影响着虚拟内存的使用,当yarn计算出来的虚拟内存,比在mapred-site.xml里的mapreduce.map.memory.mb或mapreduce.reduce.memory.mb的2.1倍还要多时,就会发生上面截图中的异常,而默认的mapreduce.map.memory.mb或 
mapreduce.reduce.memory.mb得初始大小为1024M,然后根据异常中的yarn自身根据运行环境推算出来的虚拟内存来做比较,发现比1024*2.1还要大,所以就会由NodeManage守护进程kill掉AM容器,从而导致整个MR作业运行失败,现在我们只需要调大这个比率即可,避免发生这种异常。具体调大多小,可根据具体情况来设置。

 

两种解决方法:

1、上面提到的修改yarn-site.xml配置文件,可以增加yarn.nodemanager.vmem-pmem-ratio的比例,但这种修改方法需要重新启动集群才可以生效,同时要注意所有节点的resourceManager或NodeManager进程必须重启成功(我遇到过 用stop-yarn.sh重启集群然而resourceManager进程并没有stop,导致应用不生效的情况,可在stop-yarn.sh执行后用jps命令确认); 

2、修改mapred-site.xml配置文件中这两个值,注意map和reduce的java.opts值需要小于对应的mapreduce.memory值 (value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)  。

<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>3072</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value>
</property>

 

 

 

具体Hadoop2作业的相关内存参数要如何配置,可以参考:

http://blog.chinaunix.net/uid-28311809-id-4383551.html

http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/
 

在hive命令行查看和设置相关值:

 

参考自以下链接:

http://stackoverflow.com/questions/21005643/container-is-running-beyond-memory-limits

© 著作权归作者所有

共有 人打赏支持
aibati2008
粉丝 13
博文 86
码字总数 61386
作品 0
成都
技术主管
私信 提问
Azkaban运行MapReduce报错:is running beyond virtual memory limits

错误描述   今天使用Azkaban运行Hadoop自带的单词计数jar报如下错误: [pid=19143,containerID=container_1515150928558_0003_01_000002] is running beyond virtual memory limits. Curr......

彭三青
01/05
0
0
大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解

前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误。我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了。因此写成博客,希望能够帮助那些搭建大数据环境的人解决...

虚无境
2018/08/23
0
0
hive创建动态分区时报错

报错内容:Container [pid=491,containerID=container_1397099607592_0024_01_000046] is running beyond virtual memory limits. Current usage: 193.6 MB of 1 GB physical memory used; 2......

闵开慧
2014/04/11
340
0
Spark常见问题汇总

注意:如果Driver写好了代码,eclipse或者程序上传后,没有开始处理数据,或者快速结束任务,也没有在控制台中打印错误,那么请进入spark的web页面,查看一下你的任务,找到每个分区日志的s...

ifree613
2016/03/03
8.7K
0
haoop任务失败,修改代码设置解决问题

一、跑etl任务,报错: Container [pid=31306,containerID=container_1479290736535_0004_01_000003] is running beyond physical memory limits. Current usage: 2.7 GB of 2.5 GB physica......

1350368559
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用 C 语言编写 Windows 服务程序的五个步骤(转)

摘要   Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务。为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择。本文将建立并 实现一个简单的服务程...

_编程菜鸟_
10分钟前
0
0
Linux各目录及每个目录的详细介绍

目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/...

若杰
12分钟前
3
0
vue组件系列5、日期选择

插件部分源码 <template> <div class="date-picker" @click.stop> <input class="input" v-model="dateValue" v-on:mouseover="openPanel" /> <!-- 动画特效 --> <transi......

轻轻的往前走
13分钟前
0
0
SQL

BEGIN #定义一个变量来保存该记录是否存在 declare num int; #这条sql,就是查询对应的记录有多少条,注意 into num 这两句话,就是把count(*) 查出的值,赋给到num中 select co...

张泽立
14分钟前
1
0
云栖科技评论87期:建立AI规则非常重要 但充分对话更重要

【卷首语】建立AI规则非常重要 但充分对话更重要    2016年,谷歌CEO Sundar Pichai宣布谷歌战略从Mobile First(移动优先)转向AI First(人工智能优先),在此之后,谷歌不仅在AI领域持续投入...

Mr_zebra
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部