交互方式总共有4种,
1.Client方式提交到Spark集群
2.Cluster方式提交到Spark集群
3.Client方式提交到,SparkOnYarn
4.Cluster方式提交到,SparkOnYarn
第1种.Client方式提交到Spark集群.流程如下:
1.spark-submit提交Spark计算任务。因为是Client部署方式,在哪里提交,Driver就运行在哪里
2.Driver进程加载PySpark程序,通过Py4J,将Python的Spark环境对象,转成Java的Spark环境对象
3.Driver进程向Master主节点申请,执行该Spark计算任务所需的资源
4.Master节点接收到资源请求后,会去Worker节点上创建对应的Executor进程(负责执行具体任务),并告知Driver
5.Driver会和Worker进行连接,并占用相关资源,告知其启动Executor进程,Executor启动会向Driver反向注册(即:建立心跳)
6.Driver通知Executor执行具体的任务
7.Driver通过sc.stop()告知Master释放资源,至此,程序结束
其他3种部署模式跟第1种大概类似,区别分别是:
2.Cluster方式提交到Spark集群
区别是:Driver进程的运行位置发生变化,不再和spark-submit在一起
而是在spark集群上,选择1个Worker进行执行,其他不变
3.Client方式提交到,SparkOnYarn
区别在于:Driver进程把资源调度的工作交给AppMaster进程来实现,Driver主要负责:任务接收,任务管理
4.Cluster方式提交到,SparkOnYarn
区别是:Driver进程和AppMaster进程合为一体,Driver就是AppMaster,AppMaster就是Driver