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

client

某个能够连Spark集群的服务器,通过spark-submit的shell脚本,启动SparkSubmit的时候,就会创立一个Application。

这个Application里会有ClientEndpoint和集群管理器进行对话,还有一个DriverEndpoint,用于Worker的Executor进行对话,所以咱们这个Application是和SparkSubmit同一个过程的。

cluster

cluster也是某个能够连Spark集群的服务器,通过spark-submit的shell脚本,启动SparkSubmit的时候,会创立一个与Master通信的RPC服务。

这个RPC服务,就是向Master申请Driver资源。

Master收到申请Driver的申请后,就会创立一个Driver信息,保留在内存中,并把Driver长久化,便于故障转移复原。

Master发现此时有个Worker的CPU和内存,够启动Driver,于是让发信息给这个Worker让他去启动,并且回复给SparkSubmit说曾经创立好Driver了,并且把driverId给SparkSubmit。

SparkSubmit5秒后,会那着这个driverId去验证一下是否无效,如果有效,则敞开以后过程。

Worker收到信息后,就会下载用户指定的Jar文件,通过这个jar文件开启一个过程,创立Driver,这个Driver会依据反射,启动Application。

前面的流程就跟下面client一样了,Application里会有ClientEndpoint和集群管理器进行对话,还有一个DriverEndpoint,用于Worker的Executor进行对话。

所以client和cluster的区别是,clien的Application是间接在提交程序的过程里,而cluster是在worker的某个过程里。

源码思维导图

SparkSubmit
SparkSubmit音讯
master-解决音讯
Worker-解决信息