Apache Tez 0.10.5 常用 CLI 命令与工具详解
Apache Tez 0.10.5 运维与作业命令详解,涵盖 tez-examples 子命令、yarn application 查询与终止、hdfs 操作、健康检查与 JVM 参数验证,基于 Hadoop 3.4.1 伪分布式实测。
Apache Tez 0.10.5 常用 CLI 命令与工具详解
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | 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) |
| HDFS 测试数据 | /data/wc/input/wc.txt |
Tez 没有独立的常驻服务与专用管理进程,作业运行状态分散在 YARN 与 HDFS 两侧,日常操作依赖三类工具:tez-examples 作业驱动器(提交示例 DAG)、YARN 应用命令(查询与终止)、HDFS 命令(数据与包管理)。本文所有命令与回显均在 Tez 0.10.5 + Hadoop 3.4.1 环境实测。
二、工具概览
| 工具/命令 | 所属组件 | 用途 |
|---|---|---|
| hadoop jar tez-examples-0.10.5.jar | Tez | 提交官方示例 DAG(wordcount、join 系列等) |
| yarn application | YARN | 查询、跟踪、终止 Tez 作业 |
| yarn node | YARN | 查看节点注册状态 |
| yarn logs | YARN | 聚合日志查询(需开启日志聚合) |
| hdfs dfs | HDFS | 数据文件与 Tez 运行时包管理 |
| hdfs dfsadmin | HDFS | 安全模式、集群报告 |
| jps / jps -v | JDK | 进程清单与 JVM 参数验证 |
| hadoop version / hadoop classpath | Hadoop | 版本与类路径确认 |
说明:Tez 0.10.5 的二进制发行包内没有提供独立的 tez 管理脚本,Tez Web UI 依赖 YARN Timeline Service。未部署 ATS 的环境中,作业的提交、跟踪、终止全部通过上述命令行工具完成。
三、前置条件
- 环境变量已加载(TEZ_HOME、HADOOP_CLASSPATH 等):
echo $TEZ_HOME
回显:
/opt/apache-tez-0.10.5-bin
- Hadoop 五进程齐全:
jps
回显:
8126 NameNode
8237 DataNode
8444 SecondaryNameNode
8685 ResourceManager
8794 NodeManager
21500 Jps
- 集群处于正常服务状态:
hdfs dfsadmin -safemode get
回显:
Safe mode is OFF
yarn node -list
回显:
Total Nodes:1
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node1:42803 RUNNING node1:8042 0
四、工具详解
4.1 tez-examples 作业驱动器
不带子命令执行可列出全部示例程序:
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar
回显:
An example program must be given as the first argument.
Valid program names are:
cartesianproduct: Cartesian product of two datasets
hashjoin: Identify all occurences of lines in file1 which also occur in file2 using hash join
joindatagen: Generate data to run the joinexample
joinvalidate: Validate data generated by joinexample and joindatagen
orderedwordcount: Word Count with words sorted on frequency
simplesessionexample: Example to run multiple dags in a session
sortmergejoin: Identify all occurences of lines in file1 which also occur in file2 using sort merge join
wordcount: A native Tez wordcount program that counts the words in the input files.
wordcount:基础词频统计
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar wordcount /data/wc/input/wc.txt /data/wc/out-wc
回显(节选):
2026-10-12 01:00:08,445 INFO client.DAGClientImpl: DAG: State: RUNNING Progress: 0% TotalTasks: 2 Succeeded: 0 Running: 0 Failed: 0 Killed: 0
2026-10-12 01:00:12,000 INFO client.DAGClientImpl: DAG: State: RUNNING Progress: 50% TotalTasks: 2 Succeeded: 1 Running: 1 Failed: 0 Killed: 0
2026-10-12 01:00:14,414 INFO client.DAGClientImpl: DAG: State: SUCCEEDED Progress: 100% TotalTasks: 2 Succeeded: 2 Running: 0 Failed: 0 Killed: 0
2026-10-12 01:00:14,414 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
hdfs dfs -cat /data/wc/out-wc/*
回显:
apache 1
fast 1
hadoop 1
hello 3
is 1
tez 3
teza 1
orderedwordcount:按频次排序的词频统计
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar orderedwordcount /data/wc/input/wc.txt /data/wc/output
回显(节选):
2026-10-12 00:58:55,443 INFO client.TezClient: Tez Client Version: [ component=tez-api, version=0.10.5, revision=60f3a013e904de3049e22b1a6784a51e5339bfcd, buildTime=2025-05-12T09:40:18Z, buildJavaVersion=1.8.0_292 ]
2026-10-12 00:58:57,605 INFO client.TezClientUtils: Using tez.lib.uris value from configuration: hdfs:///apps/tez-0.10.5/tez.tar.gz
2026-10-12 00:58:57,597 INFO client.TezClient: Submitting DAG application with id: application_1791766665126_0001
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
与 wordcount 的区别:DAG 由 Tokenizer、Summation、Sorter 三个 Vertex 组成(TotalTasks 3),输出按频次排序:
hdfs dfs -cat /data/wc/output/*
回显:
apache 1
fast 1
hadoop 1
is 1
teza 1
hello 3
tez 3
4.2 join 系列示例
0.10.5 版本的 join 示例参数与旧版资料差异较大,以类文件内的真实 usage 为准。
joindatagen:生成 join 测试数据
真实用法:joindatagen <outPath1> <path1Size> <path2Size> <outPath2> <expectedResultPath> <numTasks>,参数顺序与多数旧文档不同,传错只打印 generic options 帮助:
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar joindatagen /tmp/join/file1 1000 /tmp/join/file2 10000 /tmp/join/expected 2
回显(节选):
2026-10-12 01:02:05,710 INFO client.DAGClientImpl: DAG: State: SUCCEEDED Progress: 100% TotalTasks: 2 Succeeded: 2 Running: 0 Failed: 0 Killed: 0
2026-10-12 01:02:05,710 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
hashjoin:哈希连接验证
真实用法:hashjoin <file1> <file2> <numPartitions> <outPath> [doBroadcast(default false)]:
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar hashjoin /tmp/join/file1 /tmp/join/file2 2 /tmp/join/out-hash
回显(节选):
2026-10-12 01:02:24,129 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
启用广播模式(第五参数 true):
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar hashjoin /tmp/join/file1 /tmp/join/file2 2 /tmp/join/out-hash-bc true
回显(节选):
2026-10-12 01:02:38,409 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
sortmergejoin:排序合并连接
真实用法:sortmergejoin <file1> <file2> <numPartitions> <outPath>:
hadoop jar $TEZ_HOME/tez-examples-0.10.5.jar sortmergejoin /tmp/join/file1 /tmp/join/file2 2 /tmp/join/out-smj
回显(节选):
2026-10-12 01:02:52,473 INFO client.DAGClientImpl: DAG completed. FinalState=SUCCEEDED
joinvalidate:输入路径不存在时的典型失败
当输入路径不存在时作业直接 FAILED,diagnostics 会指明具体 Vertex 与原因,这是排查 Tez 失败作业的典型入口:
DAG completed. FinalState=FAILED
JoinValidate: DAG diagnostics: [Vertex failed, vertexName=lhsfile ROOT_INPUT_INIT_FAILURE
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: /tmp/join-gen
4.3 yarn application:作业查询与终止
查询运行中作业(Hadoop 3.4.1 中该命令没有 -all 选项,默认只列 SUBMITTED/ACCEPTED/RUNNING 三种状态):
yarn application -list
回显:
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
查询已完成作业(用 -appStates 指定状态):
yarn application -list -appStates FINISHED
回显:
Total number of applications (application-types: [], states: [FINISHED] and tags: []):1
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1791766665126_0001 OrderedWordCount TEZ root root.default FINISHED SUCCEEDED 100% N/A
Application-Type 显示 TEZ,可据此区分 Tez 作业与其他 YARN 应用。
查询单个作业详情:
yarn application -status application_1791766665126_0001
回显(节选):
Application-Name : OrderedWordCount
Application-Type : TEZ
User : root
Queue : root.default
State : FINISHED
Final-State : SUCCEEDED
Aggregate Resource Allocation : 28820 MB-seconds, 27 vcore-seconds
Aggregate Resource Preempted : 0 MB-seconds, 0 vcore-seconds
终止运行中作业(先提交一个 JoinDataGen,在 RUNNING 状态下执行 kill):
yarn application -kill application_1791767068928_0005
回显:
2026-10-12 01:39:12,034 INFO impl.YarnClientImpl: Killed application application_1791767068928_0005
确认终止结果:
yarn application -list -appStates KILLED
回显:
Total number of applications (application-types: [], states: [KILLED] and tags: []):1
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1791767068928_0005 JoinDataGen TEZ root root.default KILLED KILLED 100% http://node1:8088/cluster/app/application_1791767068928_0005
4.4 yarn node:节点状态
yarn node -list
回显:
Total Nodes:1
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node1:42803 RUNNING node1:8042 0
Number-of-Running-Containers 为 0 表示当前没有 Tez 作业在跑;作业运行期间该列会显示 AM 与 Task 执行单元数量。
4.5 hdfs dfs:数据与运行时包管理
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
hdfs dfs -put /tmp/wc.txt /data/wc/input/wc.txt
hdfs dfs -cat /data/wc/output/*
回显:
apache 1
fast 1
hadoop 1
is 1
teza 1
hello 3
tez 3
重跑示例前清理旧输出:
hdfs dfs -rm -r /data/wc/output
回显:
Deleted /data/wc/output
4.6 hdfs dfsadmin:集群状态
hdfs dfsadmin -safemode get
回显:
Safe mode is OFF
hdfs dfsadmin -report
回显(节选):
Configured Capacity: 163840000000 (152.59 GB)
Present Capacity: 148900000000 (138.66 GB)
DFS Remaining: 148899000000 (138.66 GB)
DFS Used: 1000000 (976.56 KB)
Live datanodes (1):
Name: 127.0.0.1:9866 (localhost)
State: UP
4.7 诊断命令:进程、版本与类路径
hadoop version
回显(节选):
Hadoop 3.4.1
Source code repository https://github.com/apache/hadoop.git -r 4d7825309348956336b8f06a08322b78422849b1
Compiled by mthakur on 2024-10-09T14:57Z
确认 HADOOP_CLASSPATH 中包含 Tez 类库:
hadoop classpath | tr ':' '\n' | grep tez
回显:
/opt/apache-tez-0.10.5-bin/conf
/opt/apache-tez-0.10.5-bin/*
/opt/apache-tez-0.10.5-bin/lib/*
验证 Hadoop 守护进程 JVM 堆参数(应全部在 256-512 MB 区间):
jps -v
回显(节选):
8126 NameNode -Dproc_namenode -Djava.net.preferIPv4Stack=true -Dhdfs.audit.logger=INFO,NullAppender -Xms256m -Xmx512m
8237 DataNode -Dproc_datanode -Djava.net.preferIPv4Stack=true -Xms256m -Xmx512m
8794 NodeManager -Dproc_nodemanager -Djava.net.preferIPv4Stack=true -Xms256m -Xmx512m
4.8 作业日志查看
Tez ApplicationMaster 的 stdout 记录了 DAG 级别的关键状态(Running Dag / Completed Dag),位于 NodeManager 本地日志目录:
ls /opt/hadoop-3.4.1/logs/userlogs/
回显:
application_1791767068928_0002
cat /opt/hadoop-3.4.1/logs/userlogs/application_1791767068928_0002/*/stdout
回显:
2026-10-12 01:05:25 Running Dag: dag_1791767068928_0002_1
2026-10-12 01:05:30 Completed Dag: dag_1791767068928_0002_1
yarn logs -applicationId <id> 命令需要集群开启 yarn.log-aggregation-enable=true 才能取回日志;未开启时该命令无输出,请按上述本地路径查看。
五、注意事项
- Hadoop 3.4.1 的 yarn application -list 已移除 -all 选项,传 -all 会抛 UnrecognizedOptionException;查历史作业一律用 -appStates。
- 示例输出目录必须不存在,重跑前先 hdfs dfs -rm -r。
- join 系列示例的参数顺序以本篇实测为准,与 0.9.x 及更早版本的 usage 不兼容;传参错误不会提示真实用法,只会打印 generic options 帮助。
- 终止作业用 yarn application -kill,KILLED 状态的作业同样占用 Aggregate Resource Allocation 统计,排查资源异常时记得过滤。
- DAG ID(dag_1791767068928_0002_1)与 YARN Application ID(application_1791767068928_0002)数字段一致,便于在日志与 YARN 侧对照。
- jps -v 中看到 -Xms256m -Xmx512m 属于 Hadoop 守护进程;Tez AM 与 Task 的堆参数在作业运行期的执行单元进程上,通过 tez-site.xml 的 launch.cmd-opts 控制。
六、常见问题
Q1:yarn application -list -all 报 Unrecognized option: -all?
A:Hadoop 3.4.1 移除了 -all。默认只显示 SUBMITTED/ACCEPTED/RUNNING;查全部状态用 yarn application -list -appStates ALL,查成功作业用 -appStates FINISHED。
Q2:作业卡在 RUNNING 如何定位?
A:三步走:yarn application -list 拿到 Application-Id;yarn application -status <id> 看 Progress 与 Diagnostics;再到 /opt/hadoop-3.4.1/logs/userlogs/<applicationId>/ 下的执行单元子目录看 AM 的 stdout 与 syslog。
Q3:yarn logs 命令没有输出? A:日志聚合默认关闭。临时方案是直接读 NodeManager 本地 userlogs 目录(见 4.8 节);长期方案在 yarn-site.xml 中设置 yarn.log-aggregation-enable=true 后重启 YARN。
Q4:joindatagen 提交后只打印 generic options 帮助? A:参数个数或顺序不对。0.10.5 的真实用法为 joindatagen <outPath1> <path1Size> <outPath2> <path2Size> <expectedResultPath> <numTasks>,共 6 个参数。
Q5:作业 FAILED,diagnostics 里出现 ROOT_INPUT_INIT_FAILURE? A:输入路径不存在或无权限。用 hdfs dfs -ls 确认输入路径;本机测试路径必须存在于 HDFS 而非本地文件系统,除非加 file:// 前缀。
Q6:如何确认 Tez 类库已加入客户端类路径? A:执行 hadoop classpath 并过滤 tez(见 4.7 节),三条 Tez 路径齐全即可;缺失时检查 HADOOP_CLASSPATH 环境变量定义。
七、参考链接
- Tez 官方示例说明(OrderedWordCount 源码导读):https://tez.apache.org/install.html
- YARN ApplicationsCLI 文档:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YarnCommands.html
- HDFS 命令行文档:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
- HDFS 管理命令文档:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html