数据湖
一个现代数据湖(湖仓一体)的架构,通常包含以下几个关键层次:
-
存储层 (Storage):负责存储原始数据文件,如HDFS、S3、OSS、MinIO等。
-
文件格式层 (File Format):数据在存储层上的物理组织格式,如Parquet、ORC、Avro。
-
表格式层 (Table Format) :这是数据湖的"大脑",负责管理元数据、提供ACID事务、时间旅行等能力。Iceberg、Hudi、Delta Lake正属于这一层。
-
计算/查询引擎 (Compute Engine):负责读取表格式层的数据进行计算和查询,如Spark、Flink、Trino、Presto。
-
Catalog/元数据服务 (Catalog Service):统一管理表、数据库等元数据,如Hive Metastore、AWS Glue。
1. 跨源联邦查询:数据不搬家,直接关联
-
王者:Trino / Presto
-
唯一性 :只有它把 Connector 架构做到了极致,能一条 SQL 同时查 Hive、MySQL、Kafka、Iceberg、ES、MongoDB。数据不用 ETL,直接 JOIN。
-
这个场景下,其他引擎做不到:Spark 要搬数据,Impala 绑死 HDFS,Flink 偏流。
-
一句话 :"数据虚拟化"的王者,联邦查询只选它。
2. 海量数据复杂 ETL / 批处理
-
王者:Spark SQL
-
唯一性 :基于 DAG 调度 + RDD 弹性 + 内存/磁盘混合计算,容错极强,生态最全。PB 级数据跑复杂 ETL、机器学习、图计算,只有它能稳。
-
这个场景下,其他引擎扛不住:Trino 内存流水线,大 ETL 容易 OOM;Flink 批处理生态不如 Spark 成熟。
-
一句话 :"海量批处理"的王者,复杂 ETL 只选它。
3. 纯实时流计算(毫秒级延迟)
-
王者:Flink SQL
-
唯一性 :原生流处理架构,Event Time、Watermark、Checkpoint、Exactly-once、状态管理,全部为流设计。端到端延迟可到毫秒级。
-
这个场景下,其他引擎做不到:Spark 是微批,延迟至少百毫秒;Trino/Impala 是批查询,没有流概念。
-
一句话 :"真流处理"的王者,实时 CDC、实时风控只选它。
4. 实时数仓 / 高并发 OLAP 报表
-
王者:Apache Doris / StarRocks
-
唯一性 :MPP + 向量化 + 存算一体,支持高并发点查和复杂多表 JOIN,运维简单,写入即可查。BI 报表后端,几千 QPS 无压力。
-
这个场景下,其他引擎有短板:ClickHouse 高并发 JOIN 弱;Trino 不存数据,查湖表有延迟;Kylin 预计算不灵活。
-
一句话 :"实时数仓+高并发 BI"的王者,替换传统 MPP 只选它。
5. 日志 / 用户行为 / 大宽表极速聚合
-
王者:ClickHouse
-
唯一性 :列存 + 极致向量化,单表上亿行聚合秒级返回。写入吞吐极高,压缩比极好。
-
这个场景下,其他引擎比不过:Doris/StarRocks 强在多表 JOIN 和高并发,但单表极致聚合 ClickHouse 更快;ES 存储成本高、聚合近似。
-
一句话 :"大宽表单表聚合"的王者,日志分析、监控大屏只选它。
6. 固定报表 / 亚秒级多维分析
-
王者:Apache Kylin / Druid / Pinot
-
唯一性 :预计算,空间换时间。Cube 或索引提前算好,查询直接命中,亚秒级响应,且不占查询时计算资源。
-
这个场景下,其他引擎做不到:Doris/ClickHouse 是现场算,维度组合多时扛不住;Trino 更慢。
-
一句话 :"固定模式 BI 加速"的王者,维度固定、查询量巨大的报表只选它。
7. 数据湖底层存储 / 多引擎共享
-
王者:Iceberg / Hudi / Paimon
-
唯一性 :提供 ACID、快照、时间旅行、Schema 演化,让 Spark、Flink、Trino 都能读同一份数据,存储计算解耦。
-
这个场景下,其他方案做不到:Hive 表没有事务和版本;直接存 Parquet 没有元数据管理。
-
一句话 :"湖仓一体底座"的王者,多引擎共享数据只选它。
8. 传统离线 T+1 数仓(稳定、成熟、便宜)
-
王者:Hive
-
唯一性 :绝对稳定、生态最广、成本最低。虽然慢,但 T+1 场景对延迟不敏感,Hive 够用且不会出错。
-
这个场景下,其他引擎没必要:Spark 更快但更贵;Trino 更快但更耗内存;Doris 更贵。
-
一句话 :"传统离线数仓"的王者,T+1 稳定跑批只选它。
9. 极速交互式查询(数据在 HDFS/Hive)
-
王者:Impala
-
唯一性 :C++/LLVM 原生编译 + 数据本地化,在 HDFS 上做交互式查询,延迟比 Spark 低,比 Trino 更贴近存储。
-
这个场景下,其他引擎有取舍:Trino 更通用但 JVM 有开销;Spark 偏批处理。
-
一句话 :"HDFS 本地交互查询"的王者,CDH 集群 Ad-hoc 只选它。
总结成一张表
| 场景 | 王者 | 为什么只能是它 |
|---|---|---|
| 跨源联邦查询 | Trino / Presto | Connector 架构,数据不搬家 |
| 海量复杂 ETL | Spark SQL | DAG 容错,PB 级批处理最稳 |
| 纯实时流计算 | Flink SQL | 原生流,毫秒级,Exactly-once |
| 实时数仓 / 高并发 BI | Doris / StarRocks | MPP 存算一体,高并发 JOIN |
| 大宽表极速聚合 | ClickHouse | 列存向量化,单表聚合最快 |
| 固定报表亚秒级 | Kylin / Druid / Pinot | 预计算 Cube,空间换时间 |
| 数据湖底座 | Iceberg / Hudi / Paimon | ACID、快照、多引擎共享 |
| 传统 T+1 离线数仓 | Hive | 稳定、成熟、便宜 |
| HDFS 本地交互查询 | Impala | C++ 原生,数据本地化 |
最后一句
选型不是选"最好"的引擎,而是选"最匹配场景"的引擎。
每个引擎在它的主场都是王者,离开主场就可能被碾压。现代大数据架构,往往是多个引擎组合 ,各司其职:
Flink 做实时入湖,Iceberg 管存储,Spark 做批处理,Trino 做联邦查询,Doris 做实时 BI,ClickHouse 做日志聚合