Impala / Presto / Trino 对比
概述
Hive 批处理够用,但交互式查询太慢,于是诞生了一批"SQL on Hadoop"引擎:Impala、Presto、Trino。它们共享 MPP 内存计算思想,却各有侧重。本文讲清 MPP 架构原理,对比三者差异与 Hive 的区别,给出适用场景。
一、MPP 架构与内存计算
1.1 MPP(大规模并行处理)
Coordinator(协调节点)
├── Worker(执行节点)
├── Worker
└── Worker
查询 → Coordinator 拆分成计划 → 各 Worker 并行执行 → 汇总结果| 特征 | 说明 |
|---|---|
| 无共享 | 每个 Worker 独立算内存与磁盘 |
| 并行执行 | 数据分布在 Worker 上并行处理 |
| 数据交换 | 中间结果通过 Shuffle 在 Worker 间流转 |
1.2 内存计算
- 数据尽量常驻内存,避免磁盘中间结果。
- 每个 Worker 直接读 HDFS/对象存储的数据块本地处理。
- 相比 Hive(落盘 + 调度开销),MPP 引擎延迟从分钟级降到秒级。
二、三大引擎概览
2.1 Impala
| 项 | 说明 |
|---|---|
| 出身 | Cloudera 开发,CDH 原生组件 |
| 定位 | 低延迟交互式 SQL |
| 特点 | 无需 MapReduce,直接在 DataNode 上执行 |
| 依赖 | 强绑定 CDH 发行版 |
2.2 Presto
| 项 | 说明 |
|---|---|
| 出身 | Facebook 开源,后独立为 PrestoDB / PrestoSQL |
| 定位 | 联邦查询引擎,跨数据源 |
| 特点 | 连接器架构,可查 Hive/MySQL/Kafka 等 |
| 现状 | 分叉为 PrestoDB(老东家)与 Trino |
2.3 Trino
| 项 | 说明 |
|---|---|
| 出身 | PrestoSQL 改名而来(2020) |
| 定位 | 现代开源查询引擎 |
| 特点 | 社区活跃、连接器丰富、性能持续优化 |
| 现状 | 新项目首选的开源 MPP 引擎 |
三、三者与 Hive 的对比
3.1 关键差异
| 维度 | Hive | Impala | Presto/Trino |
|---|---|---|---|
| 架构 | 批处理翻译器 | MPP 内存 | MPP 内存 |
| 执行 | MR/Tez/Spark | 自研执行器 | 自研执行器 |
| 延迟 | 分钟级 | 秒级 | 秒级 |
| 事务 | Hive 3 支持 ACID | 有限 | 有限 |
| 数据源 | HDFS 为主 | HDFS 为主 | 联邦多源 |
| 生态 | 数仓基础设施 | CDH 绑定 | 社区活跃 |
| 并发 | 高(批) | 中 | 中 |
| 容错 | 强(可重试) | 弱(失败重查) | 弱(失败重查) |
3.2 执行模型差异
| 维度 | Hive | MPP 引擎 |
|---|---|---|
| 数据中转 | 每阶段落盘 | Worker 内存流转 |
| 调度 | 按作业调度(YARN) | Coordinator 直接派发 |
| 失败处理 | 任务级重试 | 整查询失败重跑 |
| 适用 | 大批量稳定 ETL | 交互式即席查询 |
3.3 元数据共享
三者都可接入同一套 Hive Metastore,共用表结构:
Impala/Presto/Trino ← 读 Hive Metastore 拿表结构
← 读 HDFS/对象存储的数据这意味着数仓表建一次,Hive 跑批、Presto/Trino 交互查询、Impala 报表可以并存。
四、适用场景
4.1 引擎分工
| 场景 | 引擎 |
|---|---|
| 离线批量 ETL | Hive(Tez/Spark) |
| 即席分析查询 | Trino/Presto |
| CDH 环境交互查询 | Impala |
| 跨数据源联邦查询 | Trino(连接器) |
| 数据修正/事务 | Hive 事务表 |
4.2 选择矩阵
| 需求 | 推荐 |
|---|---|
| CDH 存量集群 | Impala(原生集成) |
| 开源自由选型 | Trino |
| 已用 Presto | 评估迁移 Trino(社区更新活跃) |
| 需要 ACID 更新 | Hive 3 事务表 |
| 跨 Hive/MySQL/ES 查询 | Trino 连接器 |
4.3 组合架构示例
ODS/DWD/DWS(Hive 批任务产出,Parquet/ORC)
│
▼
Hive Metastore(统一元数据)
│
┌────┴────┐
▼ ▼
Trino Impala
(即席查询) (BI 报表)五、性能与调优要点
| 引擎 | 调优要点 |
|---|---|
| 通用 | 数据本地性、文件格式(Parquet/ORC)、分区裁剪、统计信息 |
| Impala | 预计算统计(COMPUTE STATS)、按节点内存规划 |
| Trino | 连接器并行度、内存队列配置、物化连接器加速 |
5.1 统计信息(Impala/Trino 通用)
sql
-- Impala
COMPUTE STATS dwd_order;
-- Trino(自动收集)
-- 依赖连接器提供的统计,Hive 连接器可定期 ANALYZE
ANALYZE TABLE dwd_order;统计信息过期,优化器会选错 Join 顺序,交互查询同样需要维护统计。
六、常见问题速查
| 问题 | 原因与处理 |
|---|---|
| MPP 查询 OOM | 数据量大内存不足,改走 Hive 批处理 |
| 查询结果与 Hive 不一致 | 统计信息/元数据缓存过期,刷新 Metastore |
| Trino 连接 Hive 表失败 | 检查连接器配置与 Metastore 地址 |
| Impala 无权限 | 走 Ranger/Sentry 策略,检查 principal |
| 引擎选择混乱 | 按场景分工:批→Hive,交互→Trino/Impala |