Tez 是构建在 Hadoop YARN 之上的开源分布式计算框架,用于执行有向无环图(DAG)形式的数据处理作业。相比传统 MapReduce 固定的 Map→Reduce 两阶段模型,Tez 将作业表达为由顶点(Vertex)和边(Edge)组成的 DAG,可以灵活描述多阶段依赖,减少中间结果落盘与作业之间的调度开销,从而提升复杂计算场景的执行性能。
本集群中,Tez 作为通用执行引擎组件部署,为支持 Tez API 的上层计算组件提供 DAG 执行能力;Tez 作业由上层组件编译生成 DAG 后提交至 YARN 运行,用户一般无需直接编写 Tez 程序,主要通过参数配置影响作业执行行为。
Tez 的核心概念如下:
1、DAG:一次计算任务的整体描述,由若干顶点和边组成,定义了各阶段的执行内容与依赖关系;
2、Vertex(顶点):DAG 中的一个执行阶段,对应一组并行任务,例如一次 Map 或一次 Reduce;
3、Edge(边):顶点之间的连接,定义数据路由方式,包括一对一(one-to-one)、一对多(one-to-all)、多对一(all-to-one)等;
4、Task(任务):顶点的并行执行实例,运行在 YARN 分配的 Container 中;
5、DAGAppMaster(AM):每个 Tez 作业的 Application Master,负责向 YARN 申请资源、调度任务、维护作业状态与容错重试;
6、Container:YARN 分配的资源容器,承载 Task 进程,Tez 支持容器重用(container reuse)。
| 核心概念 | 说明 |
|---|---|
| DAG | 作业的有向无环图描述,由顶点和边组成 |
| Vertex | DAG 中的一个执行阶段,对应一组并行任务 |
| Edge | 顶点间的数据路由方式,如one-to-one、one-to-all |
| Task | 顶点的并行执行实例,运行于Container 中 |
| DAGAppMaster | 作业管理器,负责资源申请、任务调度与容错 |
| Container | YARN 分配的资源容器,可被重用以减少启停开销 |
Tez 与 MapReduce 的对比:
| 对比项 | MapReduce | Tez |
|---|---|---|
| 作业模型 | 固定的Map、Reduce 两阶段 | 以DAG 表达任意多阶段依赖 |
| 复杂计算 | 需拆分为多个作业串联,中间结果落盘 | 单作业内表达多阶段,中间结果可直连 |
| 容器重用 | 默认不重用,任务间有启停开销 | 默认开启容器重用,减少启停开销 |
| 调度开销 | 多个作业间重复申请资源 | 由AM 统一管理资源,减少重复申请 |
Tez 作业的执行流程为:客户端提交 DAG→YARN 分配首个 Container 并启动 DAGAppMaster→DAGAppMaster 申请资源并在各节点启动 Task→顶点按依赖关系执行→DAG 完成后作业状态与计数器写入历史服务。具体步骤如下:
1、客户端将 DAG 提交至 YARN ResourceManager;
2、ResourceManager 分配第一个 Container,在其上启动 DAGAppMaster;
3、DAGAppMaster 根据顶点并行度向 ResourceManager 申请资源,在对应 NodeManager 上启动 Task;
4、顶点按依赖关系依次调度执行,已完成的 Container 可被后续任务重用;
5、DAG 执行完成后,运行状态、计数器与诊断信息写入历史服务,可通过 TezUI 查询。