spark的提交方式总体来说有两种,分别是standalone模式和yarn模式。
这两种模式又分别有两种提交方式,分别是:standalone下的client提交方式。(客户端提交)
standalone下的cluster提交方式。(集群提交)
yarn下的client提交方式。(客户端提交)
yarn下的cluster提交方式。(集群提交)
下面分别来说说这几种提交方式。
Standalone模式下的两种提交方式:
1、standalone-client任务提交方式
执行流程:
1、client模式提交任务后,会在客户端启动Driver。
2、Driver与Master通信,为当前的Application申请资源。
3、资源申请成功。Driver将Task发送到Worker执行。
4、Worker将Task执行情况和执行结果返回给Driver端。
总结:
Standalone-client适合测试使用,不适合生产使用。
Driver进程是在客户端启动的,这里的客户端是指提交任务的那个节点。Driver端可以看到Task执行的情况。
Standalone-client为什么不适合生产环境呢?是因为假如要提交100个Application到集群运行,Driver每次都会在client端启动,会导致客户端100次网卡流量暴增的问题。
2、Standalone-cluster模式提交任务:
执行流程:
1、cluster模式下提交应用程序后,会向Master申请启动Driver。
2、Master接受请求后,随机在一台Worker启动Driver。
3、Driver启动后,向Master申请资源。
4、资源申请成功后,Driver将Task发送到Worker执行。
5、Worker将执行情况和执行结果返回给Driver端。
总结:
Driver进程是在集群中某一台Worker上执行的,客户端无法查看Task执行情况。假如要提交100个应用程序到集群上,每次Driver会随机在集群中某台Worker上执行。
总结Standalone两种方式提交任务,Driver与集群通信包括:
1、申请资源。
2、分发任务。
3、回收结果。
4、监控Task执行情况。
Yarn模式下的两种提交方式:
1、Yarn-clien方式提交任务:
执行流程:
1、客户端提交了一个Application,在客户端启动了一个Driver。
2、应用程序启动后会向ResourceManager(RS)发送请求,请求启动一个ApplicationMaster(AM)资源。
3、RS收到请求,随机在一台NM(NodeManager)启动AM,这里的NM相当于Standalone的Worker节点。
4、AM启动后,会向RS申请一批资源,用于启动Executor。
5、RS收到请求,向AM返回一批NM节点。
6、AM会向NM发送命令启动Executor。
7、Executor启动后会反向注册给Driver,Driver发送Task到Executor执行,并监控执行情况和结果。
总结:
与Standalone-client类似,Yarn-client同样适用于测试环境,因为Driver运行在本地,大量提交Application会导致网卡流量激增问题。
client模式下ApplicationMaster的作用(注意,client模式的AM和cluster的AM作用不同):
1、为Application申请资源。
2、给NM发送消息启动Executor。
注意,这里的AM只用申请资源的功能,没用任务调度的功能。
Yarn-cluster任务提交方式:
执行流程:
1、客户端提交了Application,发送请求到RS,请求启动一个AM。
2、AM收到请求,在集群中随便找个节点启动AM(相当于Driver端)。
3、AM启动后,向RS申请一批资源,用于启动Executor。
4、RS收到请求,向AM返回一批NM节点,用来启动Executor。
5、AM连接到NM,发送命令启动Executor。
6、Executor反向注册到AM所在节点的Driver,Driver发送Task到Executor。
总结:
cluster方式提交任务后,Driver(AM)是分布到集群各个节点的,不会造成网卡流量激增的问题。缺点是任务提交后无法查看日志,只能通过Yarn查看日志。
ApplicationMaster作用:
1、申请资源。
2、给NM发消息启动Executor。
3、任务调度。