Standalone部署模式有两种,一个是client模式,一个是cluster模式,其中client模式是默认的。

client

某个可以连Spark集群的服务器,通过spark-submit的shell脚本,启动SparkSubmit的时候,就会创建一个Application。
image.png
这个Application里会有ClientEndpoint和集群管理器进行对话,还有一个DriverEndpoint,用于Worker的Executor进行对话,所以我们这个Application是和SparkSubmit同一个进程的。
image.png

cluster

cluster也是某个可以连Spark集群的服务器,通过spark-submit的shell脚本,启动SparkSubmit的时候,会创建一个与Master通信的RPC服务。
image.png
这个RPC服务,就是向Master请求Driver资源。
image.png
Master收到申请Driver的请求后,就会创建一个Driver信息,保存在内存中,并把Driver持久化,便于故障转移恢复。
image.png
Master发现此时有个Worker的CPU和内存,够启动Driver,于是让发信息给这个Worker让他去启动,并且回复给SparkSubmit说已经创建好Driver了,并且把driverId给SparkSubmit。
image.png
SparkSubmit5秒后,会那着这个driverId去验证一下是否有效,如果无效,则关闭当前进程。
image.png
Worker收到信息后,就会下载用户指定的Jar文件,通过这个jar文件开启一个进程,创建Driver,这个Driver会根据反射,启动Application。
image.png
后面的流程就跟上面client一样了,Application里会有ClientEndpoint和集群管理器进行对话,还有一个DriverEndpoint,用于Worker的Executor进行对话。
image.png
所以client和cluster的区别是,clien的Application是直接在提交程序的进程里,而cluster是在worker的某个进程里。

源码思维导图

SparkSubmit
SparkSubmit消息
master-处理消息
Worker-处理信息


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆