大数据 -193 Apache Tez 实战:Hive on Tez 安装配置、DAG 原理与常见坑

TL;DR
场景:Hadoop2/YARN 生态中用 Tez 替代 MapReduce,给 Hive/Pig 提速。
结论:关键在 tez.lib.uris(HDFS 包路径)+ 全节点一致的 tez-site.xml/Classpath + Hive 引擎切换。
产出:一套可落地的 Tez 安装配置清单 + 版本矩阵 + 错误速查卡。
基本介绍
Tez (发音为"tez") 是一个运行在 Hadoop 生态系统中的高效数据处理框架,旨在优化批处理和交互式查询。作为 Apache 基金会下的顶级开源项目(Apache Tez),它最初由 Hortonworks 开发,现已成为 Hadoop 生态系统中重要的数据处理组件。
Tez 的核心设计目标是作为 MapReduce 的替代执行引擎,它通过引入更灵活的执行模型显著提高了处理效率。与传统的 MapReduce 相比,Tez 具有以下显著优势:
采用有向无环图(DAG)执行模型,允许更复杂的数据处理流水线
支持动态任务调度和资源分配
减少了中间结果的磁盘 I/O 开销
提供更细粒度的任务执行控制
在实际应用中,Tez 被广泛应用于以下场景:
Hive 查询加速(作为执行引擎)
Pig 脚本处理
复杂 ETL 流程
交互式分析查询
技术架构方面,Tez 包含以下关键组件:
Tez API:提供编程接口
Tez Runtime:执行引擎核心
DAG 调度器:管理任务执行顺序
资源管理器接口:与 YARN 集成
性能测试表明,对于典型的工作负载,Tez 相比传统 MapReduce 可以带来 2-10 倍的性能提升,特别是在处理复杂查询和多阶段任务时优势更为明显。
Tez 的背景
MapReduce 的局限性:Hadoop 最初是基于 MapReduce 编程模型设计的,这种模型虽然概念简单、易于理解,但在处理复杂的数据处理任务时存在明显的效率问题。MapReduce 采用严格的"map-shuffle-reduce"执行流程,每个任务阶段(map 或 reduce)都需要将中间结果写入磁盘,这种频繁的磁盘 I/O 操作会带来显著的性能开销。例如,在一个典型的 ETL(抽取-转换-加载)作业中,数据可能需要经过多个 map 和 reduce 阶段,每次都会产生磁盘写入,导致整体处理延迟增加。此外,MapReduce 的批处理特性使得它对迭代算法(如机器学习)和交互式查询的支持较差。
Tez 的改进与优势:为了解决 MapReduce 的这些限制,Apache Tez 应运而生。Tez 通过引入更灵活的执行引擎,允许开发者构建复杂的数据处理 DAG(有向无环图),而不是局限于固定的 map-reduce 阶段。例如,一个典型的 Hive 查询在 Tez 上运行时,可以将多个操作(如过滤、聚合、连接等)组织成一个优化的执行计划,避免了中间结果的多次落盘。Tez 还支持内存中的数据处理,显著减少了 I/O 开销。实际应用中,Tez 可以将某些 Hive 查询的性能提升数倍,特别是在处理多表连接或复杂聚合时效果尤为明显。此外,Tez 与 YARN 的深度集成使其能够更好地利用集群资源,支持更细粒度的任务调度。
核心解释
Tez 将 MapTask 和 ReduceTask 进一步拆分为如下所示的内容:
Tez 的 Task 由 Input、Processor、Output 阶段组成,可以表达所有复杂的 Map、Reduce 操作,如下图所示:
Tez 是一个基于 Hadoop YARN 构建的开源计算框架,它通过优化数据处理流程来显著提升作业执行效率。与传统 MapReduce 框架相比,Tez 的核心优势在于其能够将多个相互依赖的作业转换为单个综合性的 DAG(有向无环图)作业,这种优化带来了以下显著改进:
数据处理流程优化:
消除了传统 MapReduce 中多个作业间的冗余 HDFS 读写操作
中间数据直接在内存中传递,减少磁盘 I/O 开销
任务调度更加智能,能够识别和优化依赖关系
性能提升表现:
对于小型任务(如简单的数据转换或聚合查询),性能提升可达 2-3 倍
对于复杂的大型任务(涉及多表连接或复杂计算的 ETL 流程),性能提升更为显著,可达 7-10 倍
实际性能提升因数据规模、集群配置和查询复杂度而异
实际应用案例:
Hortonworks 已将 Tez 深度集成到 Hive 引擎中,作为默认执行引擎
在典型的 TPC-DS 基准测试中,使用 Tez 的 Hive 查询性能明显优于传统 MapReduce
某电商平台的数据仓库中,月报表生成时间从原来的 6 小时缩短至 45 分钟
技术实现细节:
采用动态任务调度机制,根据运行时情况优化执行计划
支持细粒度的资源管理,可精确控制每个任务的资源分配
提供可视化工具帮助开发者理解和优化 DAG 执行流程
适用场景:
交互式查询(如 Hive、Pig 等 SQL-on-Hadoop 场景)
复杂 ETL 数据处理流程
机器学习特征工程中的多步骤数据处理
需要低延迟响应的数据分析任务
值得注意的是,Tez 的性能优势在以下场景尤为突出:当作业包含多个连续的 MapReduce 步骤时,或者当中间数据量较大时,Tez 的优化效果会更加明显。实际部署时建议结合具体业务场景进行性能调优。
Tez+Hive 仍然采用 MapReduce 计算框架,但对 DAG 的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,不仅减少了计算量,而且写 HDFS 次数也大大减少。
Tez 的工作原理
DAG 结构: 在 Tez 中,数据处理任务被表示为一个 DAG(Directed Acyclic Graph,有向无环图),其中每个节点代表一个处理任务,边表示数据的流动方向。不同于 MapReduce 固定的 map 和 reduce 阶段,Tez 可以定义任意数量的任务节点和数据流,从而更加灵活高效。
按需计算模型: Tez 支持按需加载数据,避免了不必要的中间结果存储。数据可以直接在内存中传递,减少磁盘操作,从而加速计算。
Tez 的特点
高效资源管理: Tez 与 YARN(Yet Another Resource Negotiator)深度集成,采用先进的资源调度算法,能够更智能地分配和使用集群资源。它通过实时监控工作负载的变化(如数据量、计算复杂度等),动态调整 CPU、内存等资源的分配比例。例如,在数据倾斜场景下,Tez 会自动为负载较重的节点分配更多资源,同时避免资源闲置浪费。这种机制相比传统静态资源分配方式可提升 30%以上的集群利用率。
可重用的容器: Tez 创新性地实现了容器复用机制。在 YARN 架构中,容器是基本的资源分配单元(包含固定的 CPU 和内存配额)。传统框架如 MapReduce 每个任务都需要新建容器,而 Tez 允许同一容器在多个任务间重复使用(如 Map 阶段完成后容器可直接用于 Reduce 阶段)。实测表明,这种机制可以减少 40% 的任务启动时间,特别适合需要频繁启停任务的迭代计算场景(如机器学习训练)。
延迟优化: Tez 通过两项核心技术显著降低处理延迟:一是采用内存化的数据流水线(pipelining),避免像 MapReduce 那样频繁将中间数据写入 HDFS;二是实现智能的任务拓扑优化,自动选择最短执行路径。例如在 Hive 查询中,Tez 可以将多个连续的 Map-Reduce 作业合并为一个 DAG 执行,使典型 TPC-DS 查询延迟降低 50-70%,达到准实时(near-real-time)响应水平。
容错性: Tez 提供多层次的容错机制:1)任务级重试(自动重试失败任务最多 3 次);2)基于检查点(checkpoint)的部分重算,仅需重新执行故障点之后的子任务;3)备用执行计划(speculative execution)应对慢节点问题。在 Amazon EMR 的实际应用中,这些机制使得 10%节点故障时的作业完成时间仅增加 15%,而传统框架通常需要完全重新执行。
安装部署
下载软件包: apache-tez-0.9.2-bin.tar.gz 解压缩:
将 tez 的压缩包放到 HDFS 上:
$HADOOP_HOME/etc/hadoop/ 下创建 tez-site.xml 文件,做如下配置:
保存后将文件复制到集群所有节点
环境变量
增加客户端节点的配置:
单次配置
Hive 这是 Tez 执行
永久配置
如果是想默认使用 Tez,则需要在配置文件中进行修改:
Tez 与 Hive、Pig 的集成
Hive on Tez: Hive 是一种基于 SQL 的数据仓库工具,最初使用 MapReduce 作为底层引擎。自从引入 Tez 后,Hive on Tez 大幅提升了查询性能,尤其是在复杂查询场景中。相比于传统的 MapReduce,Tez 的 DAG 模型使得 Hive 可以以更加并行化的方式执行查询。
Pig on Tez: Pig 是一种面向数据流的编程语言,通常用于分析和处理大规模数据。Tez 也作为 Pig 的底层引擎使用,极大地提升了 Pig 脚本的执行效率。
Tez 的优势
高性能: 通过减少磁盘 IO、优化任务并行化和重用资源,Tez 显著提升了数据处理的性能,尤其是在复杂查询和数据流处理中。
灵活性: Tez 允许用户根据具体的数据处理需求,构建任意复杂的 DAG,从而打破了 MapReduce 固定阶段的限制。
可扩展性: Tez 在大规模数据处理环境中表现出色,适合在大数据集群中处理大规模、复杂的批处理和流式处理任务。
使用场景
数据仓库查询加速: 许多使用 Hive 的企业已经转向 Tez 来加速 SQL 查询,尤其是涉及到大数据集和复杂操作的场景。
批处理任务优化: Tez 的 DAG 模型使其非常适合执行复杂的批处理任务,如多阶段数据清洗、转换和加载(ETL)工作流。
实时或近实时处理: Tez 可以用于需要低延迟的场景,如实时数据分析和在线报告。
Tez 的局限性
学习曲线: 虽然 Tez 比 MapReduce 灵活高效,但它也更加复杂,要求开发者了解 DAG 模型及其配置。
任务复杂度: 对于非常简单的任务,Tez 的性能提升可能不明显,因此 Tez 更适用于复杂的、多阶段的任务场景。
错误速查
其他系列
🚀 AI 篇持续更新中(长期更新)
AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI 研究-132 Java 生态前沿 2025:Spring、Quarkus、GraalVM、CRaC 与云原生落地🔗 AI模块直达链接
💻 Java 篇持续更新中(长期更新)
Java-207 RabbitMQ Direct 交换器路由:RoutingKey 精确匹配、队列多绑定与日志分流实战 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务已完结,Dubbo 已完结,MySQL 已完结,MongoDB 已完结,Neo4j 已完结,FastDFS 已完结,OSS 已完结,GuavaCache 已完结,EVCache 已完结,RabbitMQ 正在更新... 深入浅出助你打牢基础!🔗 Java模块直达链接
📊 大数据板块已完成多项干货更新(300 篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/acbe9972532d78c5ca242ff90】。文章转载请联系作者。







评论