总的来说,Spark的运行模式可以分为两大类:本地模式 和集群模式。而“伪集群”通常是集群模式的一种特定部署形式。
下面我为你详细梳理一下:
1. 本地模式
- 核心概念:所有Spark进程(Driver、Executor)都运行在单个JVM中,仅利用一台机器的资源。
- 特点:
- 没有分布式计算,只是一个多线程程序。
- 主要用于开发、调试、学习和单元测试。
- 配置简单,无需启动任何集群服务。
- 常见写法:在代码或
spark-shell/spark-submit中指定master为local,local[K],local[*]。local: 使用1个线程。local[4]: 使用4个线程模拟4个核心。local[*]: 使用机器上所有可用的逻辑核心。
2. 集群模式
Spark应用程序的Driver和Executor运行在多台机器组成的集群中,真正实现了分布式计算。它主要依赖于一个外部的“集群管理器”来分配资源。根据集群管理器的不同,可以分为以下主要类型:
a) Standalone 模式
- 这是Spark内置的一个简单的集群管理器。
- “伪集群”通常指的就是这种模式在单机上的部署:在一台机器上启动Master进程和多个Worker进程,模拟多节点集群的行为。它仍然是集群架构,但所有节点都在同一台物理机上。
- 真集群:在多台物理机或虚拟机上部署,每台机器运行Worker进程,由一台机器运行Master进程。
- 特点:部署相对简单,无需依赖其他框架,适合单纯使用Spark的场景。
b) Apache YARN 模式
- Spark运行在Hadoop YARN资源管理器之上。YARN负责集群的资源管理和调度,Spark作为YARN上的一个应用客户端。
- 这是生产环境中Hadoop生态圈里最常用的模式。
- 集群本身就是由YARN管理的真集群。
c) Apache Mesos 模式
- Spark运行在Mesos集群管理器之上。Mesos是一个通用的集群资源管理平台。
- 现在用的相对较少。
d) Kubernetes 模式
- Spark在Kubernetes容器编排平台上原生运行。Driver和Executor都作为Kubernetes Pod运行。
- 这是目前云原生架构下增长最快、越来越主流的模式。
3/概念关系梳理与对比
为了更直观,你可以这样看:
| 模式大类 | 具体类型 | 管理角色 | “伪”/“真” | 主要用途 |
|---|---|---|---|---|
| 本地模式 | local[*] | 无(单JVM) | 单机非集群 | 学习、开发、测试 |
| 集群模式 | Standalone | Spark Master/Worker | 可伪(单机多进程)可真 | 独立Spark集群,简单生产环境 |
| YARN | Hadoop YARN ResourceManager | 真集群 | Hadoop生态生产环境 | |
| Kubernetes | Kubernetes Master | 真集群 | 云原生、容器化生产环境 | |
| Mesos | Mesos Master | 真集群 | 通用集群(历史选择) |
4/总结与建议
你的理解路线是对的:
- 本地模式:单机跑,非分布式。
- 集群模式:多机(或多进程)分布式跑。
- 伪集群:特指在一台机器上用多个进程(如Standalone模式)模拟分布式环境。它是一个真架构,伪分布的部署形态。
- 真集群:指资源(CPU、内存)真正分布在多台物理机/虚拟机上的集群环境。
学习路径建议:
- 入门:从
local模式开始,用spark-shell练习。 - 加深理解:在单机上部署 Standalone伪集群,了解Master、Worker、Driver、Executor的概念和日志。
- 生产实践:学习在YARN或Kubernetes上提交Spark作业,这才是企业级应用的核心。
所以,你的理解“Spark有本地模式和集群模式,集群模式还分伪集群和真集群”是抓住了精髓的,只是要知道“伪集群”更多是部署形态上的说法,核心架构依然是集群模式。