Apache Tez 0.10.5 配置参数详解
详解 Apache Tez 0.10.5 核心配置参数,覆盖 tez-site.xml 修改方式、参数优先级、运行时库定位、AM 与 Task 资源控制及日志参数,并给出单机伪分布式与生产集群两套配置模板。
Apache Tez 0.10.5 配置参数详解
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(单机伪分布式,CentOS 8 同样适用) |
| 主机名 | node1 |
| 登录账号 | root |
| JDK | OpenJDK 8 |
| Hadoop | 3.4.1(安装于 /opt/hadoop-3.4.1) |
| Tez | 0.10.5(安装于 /opt/apache-tez-0.10.5-bin) |
| Tez 配置目录 | /opt/apache-tez-0.10.5-bin/conf(由 TEZ_CONF_DIR 指向) |
Tez 的全部参数集中在 tez-site.xml 中,未覆盖的项回落到发行包 conf/tez-default-template.xml 里的默认值。Tez 没有常驻服务,参数修改立即对下一次作业提交生效,无需重启任何进程。
二、前置条件
- 已按安装指南完成 Hadoop 3.4.1 伪分布式部署、Tez 0.10.5 解压、tez.tar.gz 上传 HDFS(/apps/tez-0.10.5/tez.tar.gz),并能成功运行 OrderedWordCount 示例。
- 环境变量 TEZ_HOME=/opt/apache-tez-0.10.5-bin、TEZ_CONF_DIR=/opt/apache-tez-0.10.5-bin/conf、HADOOP_CLASSPATH 已在 /etc/profile.d/hadoop-tez.sh 中定义。
- 验证集群健康:
jps
回显:
8126 NameNode
8237 DataNode
8444 SecondaryNameNode
8685 ResourceManager
8794 NodeManager
9012 Jps
hdfs dfsadmin -safemode get
回显:
Safe mode is OFF
三、参数查看与修改方式
3.1 查看发行包默认值
Tez 全部默认值以模板文件为准(比网络资料可靠,不同版本默认值有差异):
grep -A2 'name>tez.am.resource.memory.mb' $TEZ_CONF_DIR/tez-default-template.xml
回显:
<name>tez.am.resource.memory.mb</name>
<value>1536</value>
<description>The amount of memory to be used by the AM.</description>
grep -A2 'name>tez.task.resource.memory.mb' $TEZ_CONF_DIR/tez-default-template.xml
回显:
<name>tez.task.resource.memory.mb</name>
<value>1024</value>
<description>The amount of memory to be used by the launched tasks.</description>
3.2 查看当前生效的自定义值
检查 tez-site.xml 中实际写入的属性:
grep -B1 -A2 'name>tez.lib.uris' $TEZ_CONF_DIR/tez-site.xml
回显:
<property>
<name>tez.lib.uris</name>
<value>hdfs:///apps/tez-0.10.5/tez.tar.gz</value>
</property>
3.3 修改参数
直接编辑 $TEZ_CONF_DIR/tez-site.xml。例如把 AM 堆从 512 MB 调整为 384 MB,可修改后用 grep 复核:
grep -A2 'name>tez.am.launch.cmd-opts' $TEZ_CONF_DIR/tez-site.xml
回显:
<property>
<name>tez.am.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
修改后无需重启服务,下一次 hadoop jar 提交即生效;已处于会话中的 TezClient 需要重新创建。
3.4 参数优先级
从高到低依次为:
- 提交作业时的 -D 参数(如
hadoop jar tez-examples-0.10.5.jar orderedwordcount -Dtez.task.resource.memory.mb=2048 in out)。 - 客户端 TEZ_CONF_DIR 下 tez-site.xml。
- Hadoop 配置目录(HADOOP_CONF_DIR)中的同名属性。
- tez-default-template.xml 默认值。
常用做法:全局默认写入 tez-site.xml,个别作业的临时调整用 -D 覆盖。
四、参数总览
| 参数 | 默认值 | 说明 |
|---|---|---|
| tez.lib.uris | 空 | Tez 运行时包在 HDFS 上的位置,AM 与资源单元据此本地化 Tez 类库 |
| tez.use.cluster.hadoop-libs | false | 是否使用集群自带 Hadoop 库;推荐 false(使用 Tez 包内库) |
| tez.am.resource.memory.mb | 1536 | Tez ApplicationMaster 的 YARN 资源单元内存(MB) |
| tez.am.launch.cmd-opts | -XX:+PrintGCDetails -verbose:gc | AM 的 JVM 启动参数,堆大小在此设定 |
| tez.am.launch.env | 空 | AM 进程附加环境变量 |
| tez.am.max.app.attempts | 2 | YARN 层面 AM 最大重试次数 |
| tez.am.maxtaskfailures.per.node | 4 | 单节点最大任务失败容忍数 |
| tez.task.resource.memory.mb | 1024 | 单个 Task 资源单元的 YARN 内存(MB) |
| tez.task.launch.cmd-opts | -XX:+PrintGCDetails -verbose:gc | Task 的 JVM 启动参数,堆大小在此设定 |
| tez.task.launch.env | 空 | Task 进程附加环境变量 |
| tez.am.idle 资源单元保留时长系列 | 10000-20000 毫秒 | 空闲资源单元保留与释放的时序控制(见 5.5 节) |
| tez.queue.name | 空 | 作业提交的 YARN 队列 |
| tez.am.mode.session | true | 允许以会话模式持有 AM |
| tez.am.log.level | INFO | AM 与 Task 的日志级别 |
| tez.runtime.io.sort.mb | 100 | 排序输出缓冲区大小(MB) |
| tez.runtime.unordered.output.buffer.size-mb | 100 | 无序输出缓冲区大小(MB) |
| tez.am.dag.scheduler.class | 内置调度器 | DAG 内顶点调度策略 |
五、核心参数分类详解
5.1 运行时库定位参数
tez.lib.uris
Tez 运行时包位置,AM 与所有资源单元启动时从该地址本地化 Tez 类库。实测配置与验证:
grep -A2 'name>tez.lib.uris' $TEZ_CONF_DIR/tez-site.xml
回显:
<property>
<name>tez.lib.uris</name>
<value>hdfs:///apps/tez-0.10.5/tez.tar.gz</value>
</property>
hdfs dfs -ls /apps/tez-0.10.5/
回显:
Found 1 items
-rw-r--r-- 1 root supergroup 72795938 2026-10-12 00:58 /apps/tez-0.10.5/tez.tar.gz
提交作业时客户端日志会打印该值,可作二次确认:
INFO client.TezClientUtils: Using tez.lib.uris value from configuration: hdfs:///apps/tez-0.10.5/tez.tar.gz
tez.use.cluster.hadoop-libs
取 false 时使用 Tez 包内捆绑的 Hadoop 3.4.1 客户端库(推荐,版本一致性由发行包保证);取 true 时要求集群各节点已放置匹配版本的 Hadoop 库。官方安装文档明确要求使用默认包时该项不设置或为 false。
5.2 ApplicationMaster 资源参数
tez.am.resource.memory.mb
AM 的 YARN 资源单元内存。默认 1536 MB 对单机环境偏大,实测伪分布式配置 1024 MB 可稳定运行 OrderedWordCount。该值必须不小于(JVM 堆 + 约 512 MB 堆外余量),并处于 yarn.scheduler.minimum-allocation-mb 与 maximum-allocation-mb 之间。
tez.am.launch.cmd-opts
AM 的 JVM 参数,堆大小在这里控制。实测将堆限制在 512 MB:
grep -A2 'name>tez.am.launch.cmd-opts' $TEZ_CONF_DIR/tez-site.xml
回显:
<property>
<name>tez.am.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
注意两点:不要叠加 -Xlog:gc*(Java 9+ 语法,Java 8 直接启动失败);不要使用旧参数名 tez.am.java.opts(已被本参数取代)。
tez.am.max.app.attempts / tez.am.maxtaskfailures.per.node
分别控制 AM 级重试(默认 2 次)与单节点任务失败容忍(默认 4 次)。排查偶发失败时可适度调大 maxtaskfailures.per.node。
5.3 Task 资源参数
tez.task.resource.memory.mb 与 tez.task.launch.cmd-opts 的关系与 AM 侧相同:前者是 YARN 资源单元内存(上限),后者是 JVM 堆。实测组合为堆 512 MB + 资源单元 1024 MB:
tez.task.resource.memory.mb = 1024
tez.task.launch.cmd-opts = -Xmx512m
Java 进程的实际 RSS 通常比 -Xmx 高 30%-60%(元空间、线程栈、直接内存),堆与资源单元内存按约 1:2 配置可以避免资源单元被 YARN 判定超限后强制回收。若业务确需更大堆,两处同比例上调,并确认不超过 yarn.nodemanager.resource.memory-mb。
tez.task.launch.env
需要为 Task 注入 LD_LIBRARY_PATH、自定义原生库路径等时使用,多个条目用逗号分隔。
5.4 队列与会话参数
tez.queue.name
提交队列,默认空表示使用 YARN 的 default 队列。例如指定队列 production:
grep -A2 'name>tez.queue.name' $TEZ_CONF_DIR/tez-site.xml
回显(配置后):
<property>
<name>tez.queue.name</name>
<value>production</value>
</property>
tez.am.mode.session
默认 true,允许 TezClient 以会话模式复用同一 AM 连续跑多个 DAG,减少 AM 启动开销;作业间隔离要求高时可保持默认并在客户端按需关闭。
5.5 资源单元复用参数
Tez 默认开启资源单元复用(复用开关与超时参数均可在 TezConfiguration Javadoc 中查阅),Tez 会把空闲资源单元保留一段时间供后续顶点复用,DAG 内多顶点场景收益明显。与复用行为直接相关的两个超时参数(默认值分别为 10000 与 20000 毫秒)控制空闲资源单元的最小保留与最长保留时间:
- 最小保留 10 秒:顶点间隔期内的空闲资源单元不立即释放。
- 最长保留 20 秒:超过后强制归还 YARN。
低负载单机环境若希望尽快归还资源,可把两个超时调小;并发提交多个作业时适当调大可提高复用率。
5.6 运行时内核参数
定义在 conf/tez-runtime-default-template.xml,属于任务运行时行为:
- tez.runtime.io.sort.mb(默认 100):有序输出(排序边)的排序缓冲区;数据倾斜或单任务数据量大时调大,需同步保证 task 资源单元内存充足。
- tez.runtime.unordered.output.buffer.size-mb(默认 100):无序输出(广播/直连边)缓冲区。
- tez.runtime.compress.codec:中间数据压缩编解码器,默认 org.apache.hadoop.io.compress.DefaultCodec,生产可换 Snappy 以降低磁盘与网络开销。
5.7 日志与历史参数
tez.am.log.level:AM 与 Task 日志级别,默认 INFO;排障时临时改 DEBUG。
Tez Web UI 依赖 YARN Timeline Service(ATS v2),通过 tez.history.logging.service.class 启用历史日志上报;未部署 ATS 时作业状态以命令行输出为准(yarn application -status 等),不影响作业执行。
5.8 必须联动检查的 Hadoop/YARN 参数
Tez 参数不是孤立的,以下 Hadoop 侧参数直接决定 Tez 配置能否落地:
| Hadoop 参数 | 实测值 | 与 Tez 参数的约束 |
|---|---|---|
| yarn.scheduler.minimum-allocation-mb | 256 | tez.am/task.resource.memory.mb 不得低于该值 |
| yarn.nodemanager.resource.memory-mb | 4096 | 所有 Tez 资源单元内存之和不得超过它 |
| mapreduce.map.java.opts | -Xmx512m | 以 yarn-tez 框架运行 MR 作业时任务堆 |
| mapreduce.map.memory.mb | 1024 | 与 tez.task.resource.memory.mb 保持一致口径 |
六、生产配置模板
6.1 单机伪分布式模板(256-512 MB 堆口径)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>tez.lib.uris</name>
<value>hdfs:///apps/tez-0.10.5/tez.tar.gz</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>false</value>
</property>
<property>
<name>tez.am.resource.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>tez.am.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>tez.task.resource.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>tez.task.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>tez.am.log.level</name>
<value>INFO</value>
</property>
</configuration>
适用场景:8-16 GB 内存的单机测试环境,NodeManager 可分配 4096 MB;堆全部锁定 512 MB,资源单元内存留一倍堆外余量。
6.2 生产集群模板(大内存节点口径示例)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>tez.lib.uris</name>
<value>hdfs:///apps/tez-0.10.5/tez.tar.gz</value>
</property>
<property>
<name>tez.use.cluster.hadoop-libs</name>
<value>false</value>
</property>
<property>
<name>tez.am.resource.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>tez.am.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>tez.am.max.app.attempts</name>
<value>3</value>
</property>
<property>
<name>tez.am.maxtaskfailures.per.node</name>
<value>6</value>
</property>
<property>
<name>tez.task.resource.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>tez.task.launch.cmd-opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>tez.runtime.io.sort.mb</name>
<value>256</value>
</property>
<property>
<name>tez.runtime.unordered.output.buffer.size-mb</name>
<value>256</value>
</property>
<property>
<name>tez.queue.name</name>
<value>production</value>
</property>
<property>
<name>tez.am.log.level</name>
<value>INFO</value>
</property>
</configuration>
资源标注:AM 资源单元 2048 MB(堆 512 MB,余量给 RPC 与书签线程);Task 资源单元 4096 MB(堆保持 512 MB,缓冲区 256 MB,余量给堆外与压缩);IO 排序缓冲 256 MB 适配大吞吐洗牌;队列 production 需先在 YARN 容量调度器中创建。注意:增大 io.sort.mb 前必须确认堆上限足够(缓冲区在堆内分配),堆仍为 512 MB 时建议不超过 256 MB。
6.3 修改后验证
提交一次 OrderedWordCount 确认配置生效且作业成功:
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar orderedwordcount /data/wc/input/wc.txt /data/wc/output-v2
回显(节选):
2026-10-12 00:59:13,311 INFO client.DAGClientImpl: DAG: State: SUCCEEDED Progress: 100% TotalTasks: 3 Succeeded: 3 Running: 0 Failed: 0 Killed: 0
2026-10-12 00:59:13,318 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
在 YARN 侧核对资源单元内存口径:
yarn application -status application_1791766665126_0001
回显(节选):
Application-Type : TEZ
Final-State : SUCCEEDED
Aggregate Resource Allocation : 28820 MB-seconds, 27 vcore-seconds
七、常见问题
Q1:修改 tez-site.xml 后新配置没有生效? A:依次检查:文件是否放在 TEZ_CONF_DIR 指向的目录(echo $TEZ_CONF_DIR 确认);XML 是否语法错误(属性名拼写、标签未闭合);当前 shell 是否需要重新 source /etc/profile.d/hadoop-tez.sh。提交时客户端日志会打印 Using tez.lib.uris value from configuration,以此判断文件确实被读取。
Q2:作业失败,NodeManager 日志显示 Container killed 超过物理内存限制? A:资源单元内存(resource.memory.mb)与 JVM 堆(launch.cmd-opts 的 -Xmx)差距不足。保持堆 512 MB 的前提下把 tez.task.resource.memory.mb 从 1024 上调至 2048;或反过来压缩堆。两处必须联动修改。
Q3:提交报错提示找不到 tez.lib.uris 指向的路径? A:tez.tar.gz 未上传或路径不一致。重新执行 hdfs dfs -put $TEZ_HOME/share/tez.tar.gz /apps/tez-0.10.5/,并保证 tez-site.xml 中的路径与实际完全一致(包括协议头 hdfs:///)。
Q4:tez.am.java.opts 配置了但不生效? A:该参数在 0.10.x 已被 tez.am.launch.cmd-opts 取代,使用新参数名;同理 Task 侧使用 tez.task.launch.cmd-opts。
Q5:多个作业并发提交后资源单元频繁等待,吞吐上不去? A:优先检查 yarn.nodemanager.resource.memory-mb 与 cpu-vcores 是否被单作业占满;再将 5.5 节所述的空闲资源单元最小保留时长参数适当调大(如 30000 毫秒)以提高复用率,减少重复本地化开销。
Q6:AM 启动即失败,日志出现 Unrecognized option: -Xlog:gc?* A:tez.am.launch.cmd-opts 中混入了 Java 9+ 的日志参数。OpenJDK 8 环境下删除该参数,仅保留 -Xmx 类堆设置。
八、参考链接
- Tez 官方配置参考(TezConfiguration Javadoc):https://tez.apache.org/releases/0.10.5/tez-api-javadocs/configs/TezConfiguration.html
- Tez 运行时配置参考:https://tez.apache.org/releases/0.10.5/tez-runtime-library-javadocs/configs/TezRuntimeConfiguration.html
- Tez 官方安装文档(tez.lib.uris 各模式说明):https://tez.apache.org/install.html
- YARN 资源单元内存模型文档:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceModel.html