下面把Hadoop(主要指 MapReduce + HDFS 生态)、Spark、Flink 放在同一张表里看,重点不是“谁最好”,而是“谁适合什么任务”。
一、一句话定位
Hadoop:大数据基石,擅长超大规模离线批处理 + 廉价存储。
Spark:内存计算引擎,擅长批处理、SQL 分析、机器学习、离线 ETL。
Flink:原生流处理引擎,擅长实时流计算、事件驱动、金融风控、IoT。
二、核心维度对比
维度 | Hadoop(MapReduce) | Apache Spark | Apache Flink |
|---|---|---|---|
设计哲学 | 磁盘优先、稳定可靠、分而治之 | 内存优先、DAG 执行、一站式计算 | 流优先、事件驱动、状态驱动 |
处理模型 | 纯批处理(有界数据) | 批处理为主;Streaming 为微批 | 真流式(无界数据优先),批是流的特例 |
延迟 | 分钟级~小时级 | 秒级~分钟级(微批) | 毫秒级~秒级 |
中间数据 | 频繁落 HDFS 磁盘 | 内存缓存 RDD/DataFrame,溢写磁盘 | 内存 + StateBackend,Checkpoint 落盘 |
执行引擎 | Map → Shuffle → Reduce | DAG 调度 + Tungsten 优化 | Pipeline + 事件时间 + Watermark |
迭代计算 | 很差 | 很好(ML、图计算) | 很好 |
流处理能力 | 基本不支持 | Spark Streaming / Structured Streaming(微批) | 原生流处理,强 |
时间语义 | 处理时间 | 处理时间为主,Structured Streaming 支持事件时间 | Event Time / Ingestion Time / Processing Time |
乱序/迟到数据 | 不支持 | 有限支持 | Watermark + 窗口,支持很好 |
状态管理 | 无状态 | 有限状态,需手动缓存/Checkpoint | Keyed State / Operator State,RocksDB 后端 |
一致性保证 | Task 重试,数据靠 HDFS 多副本 | 批:精确一次;流:可配至少一次/精确一次 | 通常 Exactly-Once(Checkpoint + 幂等/事务 sink) |
容错机制 | 数据块复制 + Task 重试 | RDD 血缘重算 + Checkpoint | 分布式快照(Chandy-Lamport)+ Savepoint |
SQL 能力 | Hive SQL(离线强) | Spark SQL 非常成熟 | Flink SQL 越来越强,但生态成熟度略弱于 Spark SQL |
ML / Graph | Mahout(已过时) | MLlib、GraphX 强 | Flink ML 在发展中 |
资源调度 | YARN(Hadoop 生态) | Standalone / YARN / Mesos / K8s | Standalone / YARN / K8s |
硬件偏好 | 磁盘大、内存小、便宜机器 | 内存大、CPU 强 | 内存大、低延迟网络、CPU 强 |
学习曲线 | 低层 API 难写,但概念简单 | 中:SQL/Python 友好 | 中高:Watermark、状态、反压较复杂 |
典型场景 | 历史日志清洗、T+1 报表、归档 ETL | 离线数仓、特征工程、Spark SQL、ML 训练 | 实时风控、实时大屏、交易监控、IoT 流 |
三、性能直觉
纯离线批处理:Spark >> MapReduce;Hadoop 只在“已有集群、延迟无所谓、成本极低”时还有价值。
机器学习/图计算/反复迭代:Spark 明显优于 MapReduce。
实时流、乱序事件、复杂窗口:Flink >> Spark Streaming。
高吞吐离线 + 低延迟实时同时存在:通常不是二选一,而是Spark 做离线,Flink 做实时。
四、架构角色(很重要)
很多人把 Hadoop 和 Spark/Flink 对立起来,其实生产中常是:
HDFS / Object Storage + Kafka + Spark(批/SQL/ML) + Flink(流) + Hive/Iceberg/Hudi(表格式)
Hadoop:提供HDFS、YARN、Hive Metastore 等基础设施
Spark:批计算、SQL、特征、模型训练
Flink:实时管道、风控、监控、CDC、实时数仓入口
五、选型速查
离线报表 / 历史数据清洗 / T+1 数仓 →Spark / Hive on Spark
机器学习、特征工程、大规模 SQL →Spark
实时风控、支付反欺诈、订单监控 →Flink
IoT 传感器、日志实时聚合、CEP →Flink
数据湖入湖、离线 ETL、湖仓一体 →Spark 主,Flink 做实时入湖
老系统、超低成本、延迟不敏感 →Hadoop MapReduce 还能用,但新项目不建议
六、趋势
Lambda 架构(Spark 批 + Flink 流两套)→ 维护成本高
Kappa / 流批一体(Flink 统一流批)→ 实时业务主流方向
Spark 也在增强流能力,但本质仍是微批;Flink 也在增强批能力,但生态和 SQL 成熟度还略逊 Spark
云上常见组合:Kafka + Flink + Spark + Iceberg/Hudi + ClickHouse/StarRocks