
本篇简单介绍Spark如何在集群中运行,从而可以更好的理解各个组件的关系,会涉及到Driver、Executor、Job、Stage、Task等基本概念。
1 组件
Spark应用都是独立的运行在集群中,通过主程序(Driver程序)中的SparkContext进行任务的协调。目前Spark支持在多种集群中运行,比如Spark Standalone, mesos, yarn等。当用户启动程序并与集群连接后,spark会在集群中申请executor节点,executor会执行用户的代码并为应用存储数据。接下来会把运行代码时需要的资源上传到executor所在的节点,比如通过sparkContext把jar包或者python文件分发到executor。最后SparkContext发送Task任务到executor开启执行。

注意在上面的架构中有几点比较重要:
- 每个应用都会有自己的executor进程,他们在应用运行期间会长期存活,并且通过多线程的方式执行任务。这样无论是在 driver的调度端还是executor的执行端,Spark应用都会彼此隔离互不干扰。不过这样也意味着不同的Spark应用间无法交换数据,不顾一般可以借助外部系统实现数据交换。
- Spark对资源管理系统是透明的,一旦创建好了executor进程,他们彼此间会进行通信,因此Spark可以很容易的部署在mesos或者yarn上。
- driver进程需要监听executor的连接,因此,driver程序一定要与其他的工作节点网络互通。
- 由于driver程序负责调度集群中的任务,因此它最好更靠近工作节点,比如在工作节点相同的网络上运行(即driver最好放到executor所在的集群中)。如果你需要远程提交spark,也最好是远程与driver程序通信,而不是把driver放在本地(也就是说推荐使用cluster模式而不是client模式)。
2 集群管理器类型
目前spark支持的集群有:
- standalone,spark自己组建起来的集群,一般不推荐生产环境用这个。
- mesos,可以运行mapreduce或自定义应用
- yarn, hadoop2中的资源管理器,目前大数据环境最推荐的方案。
- Kubernetes,自动部署、水平扩展、容器化管理的开源系统,新型的方案但是与hadoop环境的集成不是特别好。
3 提交应用
可以通过spark-submit部署任务,后面会详细说道。
4 监控
每个driver程序都有自己的web ui,一般是4040,展示了运行中的任务、executors、存储资源使用情况等等,后面也会详细说到。
5 任务调度
Spark通过资源管理器实现物理资源的分配,通过SparkContext进行任务的协调,细节后面会说到。
6 术语
下面是在集群中常见的术语:
- Application, 应用,用户编写的Spark代码,包含了driver代码和executor代码。
- Application Jar,应用jar,包含了Spark应用的jar包。有的时候用户会创建一个胖jar,里面既包含应用代码也包含依赖的资源。用户定义的jar不应该包含hadoop和spark相关的jar,这些都会在运行时自动添加进来。
- Driver program,运行Main方法的进程,在里面会创建SparkContext
- Cluster Manager,资源管理系统,一般是负责管理资源的外部框架,如mesos, yarn等
- Deploy Mode,部署模式,区分Driver程序运行在哪里,如果是cluster模式,driver会运行在集群内部;如果是client模式,则会运行在提交spark应用的程序里,一般在集群外。
- Worker Node,工作节点,真正执行Spark任务的节点
- Executor,在工作节点上启动的进程,运行任务并把数据保存在内存或磁盘,每个应用都会有自己的executor。
- Task,任务执行的最小单元,一般rdd有多少个分区就会有多少个任务,每个任务运行在对应的分区上。
- Job,多个Task的并行集合,一般由spark的特定操作触发,如save, collect等
- Stage,每个Job会切分成多个Stage集合,一个Stage可以看做数据网络传输的边界,比如MapStage、ReduceStage。一般会通过shuffle来划分Stage.
本文介绍了Spark如何在集群环境中运行Python程序,涉及Driver、Executor、Job、Stage和Task等核心概念。讲解了不同集群管理器类型,如Standalone、Mesos、YARN和Kubernetes,并强调了Driver程序在调度和通信中的关键作用。同时,提到了应用提交、监控和任务调度的细节,以及重要的部署模式选择。
1万+

被折叠的 条评论
为什么被折叠?



