Spark的三种部署模式及其特点与区别_spark部署模式
核心区别
-
资源管理方式
-
Local:无资源管理,仅本地线程。
-
Standalone:Spark自带的Master/Worker资源调度。
-
集群模式:依赖外部集群管理器(如YARN的ResourceManager)。
-
-
扩展性
-
Local:仅单机,无法扩展。
-
Standalone:支持多节点,但资源调度能力较弱。
-
集群模式:高扩展性,适合大规模集群(如YARN支持千级节点)。
-
-
生产适用性
-
Local:仅限开发测试。
-
Standalone:适合中小规模生产环境。
-
集群模式:企业级生产首选(如与Hadoop生态集成)。
-
Spark集群模式运行时架构
在集群模式下(以YARN为例),Spark的运行时架构包含以下核心组件:
1. 核心角色
-
Driver
-
运行用户编写的
main()
函数,负责:-
解析代码生成DAG(有向无环图)。
-
将DAG拆分为Task,分发给Executor。
-
监控任务执行状态。
-
-
两种部署模式:
-
Client模式:Driver运行在提交任务的客户端机器上。
-
Cluster模式:Driver运行在集群的某个节点(由YARN管理)。
-
-
-
Executor
-
在Worker节点上启动的JVM进程,负责:
-
执行Driver分配的Task(如Map、Reduce操作)。
-
缓存数据(通过内存或磁盘)。
-
-
每个Executor可并行运行多个Task(由
spark.executor.cores
配置)。
-
-
Cluster Manager
-
外部集群管理器(如YARN ResourceManager、K8s Master):
-
分配集群资源(CPU、内存)。
-
启动Driver和Executor。
-
-
2. 运行时流程(以YARN Cluster模式为例)
-
提交任务
-
用户通过
spark-submit
提交任务到YARN ResourceManager。 -
ResourceManager分配Container启动ApplicationMaster(Driver)。
-
-
资源申请
-
Driver向ResourceManager申请Executor资源。
-
ResourceManager通知NodeManager启动Executor容器。
-
-
任务执行
-
Driver将Task分发到Executor。
-
Executor执行Task,返回结果给Driver。
-
-
结果回收
-
Driver汇总结果,任务完成后释放资源。
-
3. 架构示意图
+-------------------+ +---------------------+| Client Machine | | YARN Cluster || (spark-submit) | | |+-------------------+ +----------+----------+ | | | 1. Submit Job | 2. Launch AppMaster (Driver) +-------------------------->+ | | 3. Request Resources +-------> ResourceManager | | 4. Start Executors +-------> NodeManagers |+------------------+ || Executor | <-----------------+| (Task Execution) | 5. Run Tasks+------------------+
不同集群管理器的对比
总结
-
部署模式选择:
-
开发测试用Local,轻量级集群用Standalone,生产环境优先选YARN/K8s。
-
-
架构核心:
-
Driver负责任务调度,Executor执行计算,Cluster Manager管理资源。
-
-
性能优化点:
-
Executor配置:调整CPU核数、内存大小(避免OOM)。
-
数据本地性:利用Spark的
locality
策略减少网络传输。
-