Hive向量化查询与Tez引擎
请解释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
优势:
- 扫描/聚合/过滤性能提升3~5倍
- CPU效率更高(SIMD指令友好)
- 减少Java对象创建,降低GC压力
二、Tez执行引擎:
原理:
- 对比MapReduce:每个MR Job需写HDFS(磁盘),阶段性扩展
- Tez将MR的Map+Reduce抽象为DAG,中间数据管道传输(内存/本地磁盘)
- 避免不必要的排序和磁盘IO
架构:
- Vertex:计算节点
- Edge:数据依赖(One-to-One/Broadcast/Scatter-Gather)
优势:
- 消除MR的中间写盘(减少70%~80%磁盘IO)
- 更灵活的算子(Union/Join直接表达)
- 减少启动开销(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。