Apache Tez 0.10.5 常用 CLI 命令与工具详解

Apache Tez 0.10.5 运维与作业命令详解,涵盖 tez-examples 子命令、yarn application 查询与终止、hdfs 操作、健康检查与 JVM 参数验证,基于 Hadoop 3.4.1 伪分布式实测。

Apache TezApache Tez2026/10/12

Apache Tez 0.10.5 常用 CLI 命令与工具详解

一、环境信息

项目值
操作系统Ubuntu 22.04.5 LTS(单机伪分布式,CentOS 8 命令一致)
主机名node1
登录账号root
JDKOpenJDK 8
Hadoop3.4.1(/opt/hadoop-3.4.1)
Tez0.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.jarTez提交官方示例 DAG(wordcount、join 系列等)
yarn applicationYARN查询、跟踪、终止 Tez 作业
yarn nodeYARN查看节点注册状态
yarn logsYARN聚合日志查询(需开启日志聚合)
hdfs dfsHDFS数据文件与 Tez 运行时包管理
hdfs dfsadminHDFS安全模式、集群报告
jps / jps -vJDK进程清单与 JVM 参数验证
hadoop version / hadoop classpathHadoop版本与类路径确认

说明: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 环境变量定义。

七、参考链接