spark与hadoop对比
Spark 与 Hadoop:不是替代,是”存储 + 计算”的分工
Hadoop 和 Spark 经常被放在一起比较,但它们的关系不是”谁取代谁”——更像基础设施和上层应用。
| 层次 | Hadoop 提供 | Spark 提供 |
|---|---|---|
| 存储 | HDFS(分布式文件系统) | 依赖外部存储,不自己管存 |
| 计算 | MapReduce(磁盘级批处理) | 内存计算引擎 |
| 资源调度 | YARN | 可以跑在 YARN 上 |
最常用的组合:HDFS 存数据 + YARN 管资源 + Spark 算数据
先看定位:一个管存,一个管算
| Hadoop | Spark | |
|---|---|---|
| 核心定位 | 分布式存储 + 批量计算 | 通用计算引擎 |
| 存储能力 | 自带 HDFS | 依赖 HDFS/S3/Kafka |
| 计算模型 | 磁盘级批处理(MapReduce) | 内存级计算(RDD/DAG) |
| 资源管理 | 自带 YARN | 可独立,也可跑在 YARN/K8s |
| 适用场景 | 离线批处理、冷数据存储 | 批处理、流处理、SQL、机器学习 |
Hadoop 的核心是”存”——它是一个存储底座。Spark 的核心是”算”——它是一个计算引擎。
计算层对比:MapReduce vs Spark
这是两者最直接的差异。
| 对比项 | MapReduce | Spark |
|---|---|---|
| 中间结果 | 写磁盘(HDFS) | 优先内存,不够才写磁盘 |
| 多阶段任务 | 每阶段写一次磁盘 | DAG 串联,内存流转 |
| 任务启动 | 每个任务起 JVM(秒级) | 线程池复用(毫秒级) |
| 排序策略 | 强制排序 | 按需排序 |
| 迭代计算 | 每次读磁盘,效率低 | 内存缓存,效率高 |
| 延迟 | 分钟-小时级 | 秒-分钟级 |
一个直观的例子:
机器学习训练迭代 100 次,MapReduce 每次都要从 HDFS 读数据、写中间结果;Spark 第一次读进内存,后面 99 次都在内存里算。
速度差 10-100 倍。
存储层对比:HDFS vs Spark 无内置存储
| HDFS | Spark | |
|---|---|---|
| 存什么 | 原始数据、中间结果、最终结果 | 不存长期数据 |
| 数据持久化 | 多副本,高可靠 | 任务结束内存释放 |
| 容错 | 副本机制 | Lineage(血缘重算) |
| 存储介质 | 磁盘 | 内存为主 |
Hadoop 的核心资产是 HDFS——它存储海量数据,多副本保可靠性,廉价硬件也能跑。
Spark 不存数据,它从 HDFS 读数据,算完写回 HDFS 或输出到其他系统。
所以 Spark 依赖 Hadoop(或 S3 等存储系统)作为数据源和目标。
调度层对比:YARN vs Standalone
| Hadoop YARN | Spark Standalone | |
|---|---|---|
| 定位 | 通用资源管理平台 | Spark 自带的集群管理 |
| 支持框架 | MapReduce / Spark / Flink | 仅 Spark |
| 资源隔离 | 支持 CPU、内存 | 支持内存 |
| 高可用 | 支持 | 支持 |
实际生产中:
- 已有 Hadoop 集群 → Spark 直接跑在 YARN 上,统一资源管理
- 纯 Spark 集群 → 用 Standalone 或 K8s
数据通信方式:这是根本区别
MapReduce 和 Spark 最大的技术差异在于”阶段之间的数据怎么传递”。
MapReduce:先写磁盘,再读磁盘
Map → 写 HDFS → Reduce → 写 HDFS → 下一个 Map → 写 HDFS → ...
每个阶段之间都要落盘,磁盘 IO 是主要瓶颈。
Spark:内存传递,不够才落盘
Stage 1 → 内存 → Stage 2 → 内存 → Stage 3 → ...
Shuffle 数据优先放内存,只有内存不够才写磁盘。
为什么 Spark 能这么做?
- RDD 的 Lineage(血缘关系)记录了数据来源和转换过程
- 某个分区丢了,从源头重算就行,不需要每次都持久化
- DAG 调度器知道哪些 Stage 能合并、哪些必须 Shuffle
它们是怎么配合的
一个典型的大数据平台架构:
数据源(日志/DB)
↓
HDFS(存储原始数据)
↓
Spark(清洗、转换、分析)
↓
HDFS(存储结果)
↓
BI 工具 / 报表
YARN 管着谁用什么资源,HDFS 存着数据,Spark 算着数据。
适用场景
| 场景 | 推荐 | 原因 |
|---|---|---|
| 海量数据离线批处理(TB/PB 级,小时级容忍) | Hadoop MapReduce | 磁盘存储成本低,容错强 |
| 数据仓库 ETL(分钟级响应) | Spark SQL | 内存计算快 |
| 机器学习迭代训练 | Spark MLlib | 迭代计算优势大 |
| 实时流处理 | Spark Streaming / Flink | Spark 微批处理,延迟秒级 |
| 数据长期存储(冷数据) | HDFS | 低成本、高可靠 |
| 即席查询(Ad-hoc 分析) | Spark SQL | 响应快 |