Master和Worker集群资源管理
Master和Worker是Spark的守护进程、集群资源管理者,即Spark在特定模式下正常运行所必须的进程。
Master 类似于Yarn中的ReourceManager
Worker 类似于Yarn中的NodeManager
Master和Worker 只有 Standalone模式中采用,所以Master和Worker是运行在集群模式中的。
Master 和 Worker 启动时机
随着集群的启动而启动,随着集群的停止而消失。
Driver和Executor任务的管理者
Driver和Executor是临时程序,当有具体任务提交到Spark集群才会开启的程序。
Driver 作用:
- 负责任务调用,类似于 ApplicationMaster。
- 负责将用户写的程序转换为一个job。
如执行一个worldCount程序。
scala>sc.textFile("/opt/module/spark-local/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String, Int)] = Array((hadoop,6), (oozie,3), (spark,3), (hive,3), (atguigu,3), (hbase,6))
- 跟踪所有的Executo任务状态;
是否闲置,是否接收到任务,是否完成,完成进度如何等。如果执行失败,会在其他服务器上重写执行一次(容错处理)。 - 负责所有执行节点的调度任务;
- 在job执行过程中,可以打开一个web界面,这就是UI展示。
- Driver 是一个线程。
Executor作用:
- 负责执行spark具体的job任务。
- Executor 是一个进程,他们把一个个任务交给 task(线程) 去执行。
- Executor 中会有一些资源 如 内核数、内存等,task 会共享这些资源。
生命周期:
- Driver类似于一个 ApplicationMaster;当有任务执行时会生成一个Driver,任务接收后,会申请注销自己。
- Executor 同样如此,随着单个任务完成之后,而消失。
作用:
Master和Worker:只有Standalone模式中才有。
Driver和Executor:Standalone模式和YARN模式 都有。
Standalone模式
Standalone模式是Spark自带的资源调动引擎,构建一个由Master + Slave构成的Spark集群,Spark运行在集群中。
这个要和Hadoop中的Standalone区别开来。这里的Standalone是指只用Spark来搭建一个集群,不需要借助Hadoop的Yarn和Mesos等其他框架。
运行流程
Spark有standalone-client
和standalone-cluster
两种模式,主要区别在于:Driver程序的运行节点
。
该模式是由 --deploy-mode
所指定。
--deploy-mode client \
or
--deploy-mode cluster \
若指定,默认为client
模式。
standalone client与cluster模式的区别: Driver所在的位置不一样
Client模式: Driver在client端【spark-submit所在】,Driver就在SparkSubmit进程中,client模式不能关闭client,client关闭Driver会消失,不能进行任务分配从而导致任务失败
cluster模式: Driver可能在任意一个Worker中,可以关闭client,因为Driver与client不在一块,client关闭不影响Driver
standalone-cluster模式:
1.提交程序
scala>sc.textFile("/opt/module/spark-local/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
- 创建
SparkSubmit
进程
在提交程序的服务器上创建一个SparkSubmit
进程,在SparkSubmit
进程中也会有一个客户端Client
,此时在客户端中并不会启动Driver
。 - 请求启动
Driver
Client
向Master
提交请求,找一个Worker
启动Driver
- 启动
Driver
Master
根据任务的资源配置找到一个Worker
启动Driver
- 申请计算资源
Driver
计算任务时需要资源(如:需要多少个executor,每个executor需要多少内存),此时会向Master
申请资源。 - 筛选资源充足的
Worker
Master
并没有资源,但是它知道哪些Worker
能满足Driver
的条件。 - 启动对应的
Executor
在资源充足的Worker
中启动Executor
,Executor
启动好之后表示资源已经准备好了。 - 反向注册,申请计算任务。
于是Executor
会向Driver
发送反向请求, 告诉它,我准备好了,你把任务给我吧。 - 提交
Task
到Executor
中执行。
Driver
会将Task
提交到Executor
中进行执行。 - 注销、释放资源
等待所有的Task
执行完毕后,整个任务就执行完毕了,Driver
向Master
提交申请注销自己。
standalone-client模式:
- 程序运行时会创建一个
SparkContext
进程 - 该进程中会维护一个
Client
端,Driver
便会在Client
端中被创建。 -
Client
回向Master
注册任务,申请资源. -
Master
接收到请求之后,会根据spark-submit
提交的资源参数筛选出合适的Worker
- 此时
Worker
会运行一个Executor
。 -
Executor
准备好之后,反向注册到Driver
,申请任务。 - 此时
Driver
便会把Job
交给Executor
进行运行。 -
Driver
等待所有的task
运行完毕之后,此时便开始注销自己,释放资源。
yarn-client模式
- 程序运行时会创建一个
SparkContext
进程 - 该进程中会维护一个
Client
端,Driver
便会在Client
端中被创建。 -
Driver
向ResuoreManager
注册任务,申请运行ApplicationMaster
。 -
ResuoreManager
收到请求之后,会找到一个NodeManager
启动一个ApplicationMaster
。 -
ApplicationMaster
向ResuoreManager
申请资源。 -
ResuoreManager
将会筛选出合适的NodeManager
列表给ApplicationMaster
。 -
ApplicationMaster
会根据列表找到对应NodeManager
,运行Executor
,同时监听Executor
的运行状态 -
Executor
会反向注册到Driver
中,申请运行任务。 -
Driver
会将Job
交给Executor
进行运行。 - 等待所有的
Task
运行完毕之后,ApplicationMaster
向ResuoreManager
提交申请注销自己,释放资源。
yarn-cluster模式
yarn-client模式 与 yarn-cluster模式 唯一的区别在于Dirver
的运行位置不同。
在yarn-cluster模式中,Dirver
将会运行在ApplicationMaster
运行的服务器上。
- 程序启动时会创建一个
SparkContext
进程,该进程同样维护一个Client
端。 -
Client
向ResuortManager
注册任务,神奇运行ApplicationMaster
。 -
ResuortManager
会找到一台NodeManager
运行ApplicationMaster
。 -
ApplicationMaster
会启动一个Driver
进程。 - 创建完成之后
ApplicationMaster
向ResuortManager
申请资源。 -
ResuortManager
筛选合适的NodeManager
列表给ApplicationMaster
。 -
ApplicationMaster
根据列表找到对应的NodeManager
运行Executor
进程 -
Executor
反向注册到Driver
中,申请任务 -
Driver
将Job
交给Executor
运行 - 等到
Driver
中所有的Task
任务运行完毕之后,ApplicationMaster
向ResuortManager
申请注销自己,释放资源。