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的某个进程里。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。