Hive、Tez、Yarn资源问题总结以及优化参数
- 问题解决
Hadoop版本:2.7.3
Hive版本: 2.1.1
Tez版本: 0.9.1
问题描述:Hive集成Tez后,配置默认选择的执行引擎为tez,如下hive-site.xml配置截图。
在服务器上直接执行hive命令,可以正常进入hive客户端,
执行 set hive.execution.engine;
当set hive.execution.engine=mr;以mr作为执行引擎时,执行一些聚合,统计类的sql,比如count(1) ,会直接报以下错误:DEFAULT_MR_AM_ADMIN_USER_ENV。
咋看这种不明确的错误很懵逼,后查阅资料则是jar包冲突。
解决方法:
https://blog.youkuaiyun.com/cuichunchi/article/details/108611831
其中包括spark 的问题解决。
- 出现如下图异常:
表示没有可用的container容器分配了,由于container资源被抢占或者资源不足,而task最大的失败重试次数默认是4。故需要调整以下参数:
参数:用set 设置 |
值 |
描述 |
tez.am.task.max.failed.attempts |
10 |
Task任务的重试次数 |
tez.am.max.app.attemps |
5 |
AM自己失败的最大重试次数,默认2次,可能因为一些系统原因导致失联 |
hive.tez.container.size |
不小于 yarn.scheduler.minimum-allocation-mb或者是等于 yarn.scheduler.maximum-allocation-mb的倍数 |
Tez AppMaster向RM申请的container大小,单位M |
注意:hive.tez.container.size也不能过大,设置太大执行直接会以下错误:
- 出现如下图异常报错信息:
因为在mapred-sit.xml文件中配置的mapreduce.task.io.sort.mb=307,表示环形缓冲区的大小,
而上图上设置了tez.java.opts为128M,明显小于307M,从报错提示也能看出,故重新设置hive.tez.java.opts为307/0.8即可。
- 优化参数详解
背景
tez是hive的常用引擎之一,本文介绍tez常用的调试参数。主要是内存,map/reduce数量方面的调试。
Tez内存分布图:
Mapreduce内存分布图:
1.内存调试
tez.am.resource.memory.mb
默认值 |
参数说明 |
详细解释 |
128 |
Application Master分配的container大小,单位为M |
|
tez.am.launch.cmd-opts
默认值 |
参数说明 |
详细解释 |
-Dlog4j.configurationFile=tez-container-log4j2.properties -Dtez.container.log.level=INFO -Dtez.container.root.logger=CLA |
Tez AppMaster进程启动期间提供的命令行选项。 不要在这些启动选项中设置任何Xmx或Xms,以便Tez可以自动确定它们 |
不需要主动设置 |
hive.tez.container.size
默认值 |
参数说明 |
详细解释 |
128 |
Tez AppMaster向RM申请的container大小,单位M |
不需要主动设置TEZ的AppMaster占用的container大小由TEZ自动跳转,但是向AM申请出来的container大小则需要本参数管理 |
hive.tez.java.opts(可以直接设置–XX:NewRatio=8)