概述
Hadoop和PySpark都是大数据处理框架,但它们有不同的架构和特点。PySpark可以运行在Hadoop之上,利用Hadoop的存储系统(HDFS)和资源管理(YARN),同时提供了更高效的内存计算能力。
对比表
| 特性 | Hadoop (MapReduce) | PySpark | 关系说明 |
|---|---|---|---|
| 编程语言 | Java为主 | Python (Scala/Java API) | PySpark为Python开发者提供接口 |
| 计算模型 | 基于磁盘的批处理 | 基于内存的批处理/流处理 | PySpark计算效率更高 |
| 执行速度 | 较慢(需多次磁盘I/O) | 较快(内存计算) | PySpark通常比Hadoop快10-100倍 |
| API易用性 | 较低(需编写Mapper/Reducer) | 较高(高级API) | PySpark更易上手 |
| 资源管理 | 原生YARN | 可使用YARN/Mesos/Standalone | PySpark常利用Hadoop YARN |
| 存储系统 | HDFS | 支持HDFS及其他存储系统 | PySpark可读写HDFS数据 |
| 实时处理 | 不支持 | 支持(Spark Streaming) | PySpark扩展了实时能力 |
| 机器学习 | 需Mahout等扩展 | 内置MLlib | PySpark提供更丰富的ML工具 |
架构关系图
+---------------------------------------------------+
| PySpark应用程序 |
| (Python代码通过Py4J调用Spark JVM核心) |
+---------------------------------------------------+
↓
+---------------------------------------------------+
| Spark核心引擎 |
| (Spark SQL, Spark Streaming, MLlib, GraphX) |
+---------------------------------------------------+
↓
+---------------------------------------------------+
| 集群资源管理器 |
| (YARN - Hadoop资源管理 或 Mesos/Standalone) |
+---------------------------------------------------+
↓
+---------------------------------------------------+
| 存储系统 |
| (HDFS - Hadoop分布式文件系统 或其他存储系统) |
+---------------------------------------------------+
典型使用场景
- Hadoop为主:PySpark作为计算引擎运行在Hadoop YARN上,处理HDFS中的数据
- Spark独立:PySpark使用自己的集群管理器,处理多种数据源
- 混合使用:利用Hadoop的HDFS存储数据,用PySpark进行高效计算
PySpark不是Hadoop的替代品,而是提供了更高效的计算层,可以与Hadoop生态系统协同工作。
YARN(Yet Another Resource Negotiator)详解
YARN是Hadoop生态系统中的核心资源管理和作业调度组件,全称为"Yet Another Resource Negotiator"(另一种资源协调者)。
概念
YARN是Hadoop 2.0引入的架构,将资源管理和作业调度/监控功能分离,解决了第一代Hadoop(MapReduce)中资源管理与计算框架紧耦合的问题。
核心功能
- 集群资源管理 :统一管理
集群中的CPU、内存等计算资源 - 作业调度:协调多个应用程序共享集群资源
- 多框架支持:不仅支持MapReduce,还支持Spark、Tez等计算框架
架构组成
+---------------------+
| Client | # 提交应用程序
+---------------------+
↓
+---------------------+
| ResourceManager(RM) | # 集群资源总管
| - Scheduler | # 资源调度
| - ApplicationsManager| # 应用管理
+---------------------+
↓
+---------------------+
| NodeManager(NM) | # 单个节点代理
| - 管理容器(Container) |
| - 监控资源使用 |
+---------------------+
↓
+---------------------+
| ApplicationMaster | # 每个应用一个AM
| - 申请资源 |
| - 任务协调 |
+---------------------+
YARN与PySpark的关系
-
YARN为PySpark提供:
- 资源隔离和分配
- 多应用共享集群资源
- 容错能力
- 灵活的调度策略