前言
- Hive:2.3.0
- Hadoop:2.7.7
- JDK:1.8.0_221
- Tez:0.9.1
报错一
报错内容:
在Hive下使用Tez引擎执行MR Job时报错:Container killed on request. Exit code is 143
问题分析:
从Container killed on request这几个关键字就可以猜测,Container在非正常结束时被kill,很有可能就是Container使用的内存超出Container限制导致的。
查看Hive运行日志:
Hive的默认日志存放路径为${sys:java.io.tmpdir}/${sys:user.name},可以通过修改log4j日志框架配置文件hive/conf/hive-log4j2.properties中的property.hive.log.dir参数,自定义Hive日志文件输出路径。Hive日志默认按天进行滚动,property.hive.log.dir下的hive.log文件代表当天运行日志,带有后缀的代表之前某天的Hive运行日志文件。
通过日志定位问题:
通过查看Hive运行日志,发现了Application失败的诊断信息(Diagnostics),并根据Hive日志提供的app跟踪链接(本次日志中显示的是http://hadoop102:8088/cluster/app/application_1591155550718_0012),查看到了具体的诊断信息:
Diagnostics: Container [pid=35306,containerID=container_1591155550718_0012_02_000001] is running beyond virtual memory limits. Current usage: 244.1 MB of 1 GB physical memory used; 2.3 GB of 2.1 GB virtual memory used. Killing container.
由诊断信息可以得知,Container运行时超过了虚拟内存限制,故非正常终结kill了Container,故接下来首个尝试的优化方案就是调整Hadoop集群的虚拟内存相关参数
解决方案:
方案一:
解除YARN的虚拟内存检查,即不限制Container对于虚拟内存的使用,在yarn-site.xml配置文件的configuration标签中增加以下配置参数:
<!-- 是否限制Container对于虚拟内存的使用,即使超出预设的虚拟内存大小 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>

本文针对Hive使用Tez引擎时遇到的Container内存溢出问题,提供了三种解决方案,包括解除虚拟内存检查、调整虚拟内存与物理内存比例及优化TezTask JVM堆内存分配。同时,解决了配置Tez后使用默认MR执行Job时的版本冲突问题。
最低0.47元/天 解锁文章
386

被折叠的 条评论
为什么被折叠?



