Hive使用Tez引擎时被NodeManager杀死进程问题

本文探讨了在运行Tez时遇到的内存溢出问题,详细解析了NodeManager因容器超出虚拟内存限制而终止进程的情况。提供了两种解决策略:一是禁用虚拟内存检查,二是调整Map和Reduce任务的内存配置,确保资源合理分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行Tez时检查到用过多内存而被NodeManager杀死进程问题:

Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. 
Application application_1546781144082_0005 failed 2 times due to AM Container for appattempt_1546781144082_0005_000002 exited with  exitCode: -103
For more detailed output, check application tracking page:
http://hadoop103:8088/cluster/app/application_1546781144082_0005Then, click on links to logs of each attempt.
Diagnostics: Container [pid=11116,containerID=container_1546781144082_0005_02_000001] is running beyond virtual memory limits. 
Current usage: 216.3 MB of 1 GB physical memory used; 2.6 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-site.xml,在项目里我选这个,因为并不是真正的内存不足

<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

方案二:mapred-site.xml中设置Map和Reduce任务的内存配置如下:(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>
在Cloudera的Hadoop发行版CDH中集成Tez引擎并优化Hive on Tez的内存配置,是一个涉及多个技术环节的复杂过程。建议您参阅《CDH集成Tez:从安装到配置及常见问题解决方案》以获得全面的指导。以下是整合Tez和优化内存配置的步骤和建议: 参考资源链接:[CDH集成Tez:从安装到配置及常见问题解决方案](https://wenku.youkuaiyun.com/doc/5ddp5gpmar?spm=1055.2569.3001.10343) 首先,确保您已经安装了CDH,并希望替换或增强现有的MapReduce引擎,以获得更好的性能。接下来,按照以下步骤操作: 1. 下载并编译protobuf。由于CDH中可能不包含最新版本的protobuf,因此需要从Apache官网下载并编译protobuf-2.5.0版本。确认编译成功后,将 протос 编译器的可执行文件添加到系统的PATH环境变量中。 2. 下载并编译Tez源码。从Apache官网下载Tez-0.9.1的源码包,解压后配置Maven环境,使用以下命令进行编译: ``` mvn clean package -Pdist -DskipTests -Dtar ``` 在此过程中,确保Maven版本至少为3.0.0。 3. 配置TezHive on Tez。将Tez编译生成的jar包放置到Hadoop集群中的合适位置,并按照文档中的指导进行配置。避免直接复制jar包到Hive的lib目录,而是通过配置文件正确引用。 4. 针对内存问题进行优化。内存问题Hive on Tez运行可能遇到的常见问题,可以通过调整YARN的资源配置以及Tez的执行参数来进行优化。具体来说,需要调整以下参数: - `yarn.nodemanager.resource.memory-mb`:节点上可用于YARN容器的总内存。 - `yarn.scheduler.maximum-allocation-mb`:YARN容器能申请的最大内存。 - `hive.tez.container.size`:Tez容器的默认内存大小。 - `hive.tez.java.opts`:Java虚拟机的选项,包括堆内存大小。 可以在hive-site.xml中设置这些参数,并根据作业的运行情况动态调整。 在完成上述步骤后,您应该能够在CDH环境中成功集成Tez,并通过优化内存配置解决Hive on Tez的内存问题。如果在过程中遇到任何问题,可以参考提供的文档中的常见问题解决方案。 为了更深入地理解CDH、TezHive on Tez的集成和优化过程,建议在解决内存问题之后继续阅读相关章节和资料。此外,针对内存管理的最佳实践和深入的技术原理,您可以查阅更多专业书籍和在线资源,以便在未来遇到类似问题能够更加从容应对。 参考资源链接:[CDH集成Tez:从安装到配置及常见问题解决方案](https://wenku.youkuaiyun.com/doc/5ddp5gpmar?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值