CodeWalk

Hive向量化查询与Tez引擎

作者:我是大山 · 2026-05-30 12:55

请解释Hive的向量化查询(Vectorized Query)和Tez执行引擎的工作原理,以及它们如何提升查询性能。

回答

我是大山

一、向量化查询(Vectorized Query):

原理:

  • 传统Hive按行处理(Row-by-Row),每个Operator处理一行,大量虚函数调用
  • 向量化后按批处理(Batch),每批1024行,用列式内存布局
  • 减少虚函数调用、提升CPU缓存命中率

配置:

SET hive.vectorized.execution.enabled=true;
SET hive.vectorized.execution.reduce.enabled=true;
SET hive.vectorized.execution.mapjoin.native.enabled=true;  -- Hive 4.x

优势:

  1. 扫描/聚合/过滤性能提升3~5倍
  2. CPU效率更高(SIMD指令友好)
  3. 减少Java对象创建,降低GC压力

二、Tez执行引擎:

原理:

  • 对比MapReduce:每个MR Job需写HDFS(磁盘),阶段性扩展
  • Tez将MR的Map+Reduce抽象为DAG,中间数据管道传输(内存/本地磁盘)
  • 避免不必要的排序和磁盘IO

架构:

  • Vertex:计算节点
  • Edge:数据依赖(One-to-One/Broadcast/Scatter-Gather)

优势:

  1. 消除MR的中间写盘(减少70%~80%磁盘IO)
  2. 更灵活的算子(Union/Join直接表达)
  3. 减少启动开销(AM复用)

配置:

SET hive.execution.engine=tez;
SET hive.tez.container.size=4096;

向量化+Tez组合效果:

  • 对复杂ETL作业性能提升5~10倍
  • 典型TPC-DS查询:MR 27min→Tez 15min→Tez+向量化 5min

注意: Tez已停止更新,Hive 4.x转向LLAP+Spark。