最近总结了一些关于spark core的内容,今天先来和大家分享一下spark的运行模式。
spark运行模式
(1)local:在本地eclipse、IDEA中写spark代码运行程序,一般用于测试
(2)standalone:spark自带的资源调度框架,支持分布式集群搭建。Spark可以运行在standalone集群上
(3)Yarn:Hadoop生态圈中的资源调度框架,spark可以基于Yarn运行
(4)Mesos: 资源调度框架 (用的比较少)
下面,来给大家总结一下spark基于standalone和yarn集群上提交作业的流程:
有两种可选的运行方式:
(1)client 一般用于测试环境
(2)cluster 用于实际生产环境
Spark基于standalone集群提交任务的流程:
1.Client模式:
1)集群启动后,worker向Master汇报资源(资源指core和内存)
2)Master掌握了集群的资源
3)客户端提交spark任务,首先在客户端启动Driver
4)客户端向Master申请资源
5)Master找到满足资源的worker节点,在worker节点上启动Excutor进程,反向注册给Driver。
6)Driver向Worker发送Task,监控task的执行,回收结果。
流程图示:
注:(1)Driver在客户端启动
(2)每个SparkApplication有独立的Driver和Excutor
(3)Driver和集群中的worker会有大量的通信,如果有很多的apllication提交,而这种client运行方式中Driver均在客户端启动,就很容易造成客户端节点的网卡流量激增问题。所以这种方式适用于程序测试环境,不适用与生产环境。
(4)在客户端可以查看task执行过程和结果,方便调错。
2.Cluster模式:
spark基于standalone集群的cluster模式的提交任务流程:
1) 集群启动后worker向Master汇报资源
2) Master掌握集群资源
3) 客户端提交sparkApplication,客户端向Master申请启动Driver。
4) Master收到请求后随机找一台节点启动Driver。
5) Driver向Master申请资源用于启动Application
6) Master找到满足资源的worker节点,启动Excutor,反向注册给Driver
7) Driver发送task到worker节点,监控task,回收结果(collect方法)
流程图示:
注:(1)先启动Driver,再启动Application
(2)Driver在随机一台worker节点上启动,当有很多的SparkApplication提交时,这些Application作业的Driver都是分布在集群中不同worker节点上的,解决了client模式中单节点网卡流量激增的问题,适用于生产环境。
(3)在客户端看不到task的执行过程以及运行结果,要在WebUI中查看
Spark基于yarn集群提交任务的流程:
1.Client模式:
流程总结:
1) NodeManager向ResourceManager汇报资源
2) ResourceManager掌握集群资源
3) 客户端提交Application,在客户端启动Driver
4) 客户端向ResourceManager申请启动ApplicationMaster。
5) ResourceManager收到请求之后随机找一台NodeManager启动ApplicationMaster
6) ApplicationMaster启动之后向ResourceManager申请资源用于启动Excutor,
7) ResourceManager收到请求后返回一批满足要求的NodeManager节点给AM
8) ApplicationMaster连接NodeManager启动Excutor
9) Excutor反向注册给Driver
10)Driver发送task给NodeManager,监控task执行,并回收结果
流程图示:
2.Cluster模式:
Spark基于Yarn的Cluster提交作业流程总结:
1) 集群启动后,NodeManager向ResourceManager汇报资源
2) ResourceManager掌握了集群资源
3) 客户端提交SparkApplication
4) 客户端向ResourceManager申请启动ApplicationMaster
5) ResourceManager随机找一台NodeManager启动ApplicationMaster(Driver)
6) ApplicationMaster向ResourceManager申请资源用于启动Excutor
7) ResourceManager返回一批满足资源的NodeManager节点给ApplicationMaster
8) ApplicationMaster在这些NodeManager上启动Excutor
9) Excutor反向注册给Driver(ApplicationMaster)
10) ApplicationMaster发送task给NodeManager,监控task执行,回收结果
流程图示:
总结: