之前以standalone模式剖析过spark程序的执行流程,这里来剖析下其他两种模式(yarn-cluster和yarn-client)的区别。

一般yarn-client用于测试环境调试程序;yarn-cluster用于生产环境。看完下面的剖析就明白为什么。

一、yarn-cluster

与standalone模式不同,yarn-cluster是基于yarn集群,yarn集群上有ResourceManager(RM)和NodeManager(NM)。

yarn-cluster和yarn-client模式剖析

1、发送请求到RM,请求启动AM

2、RM会分配container,在某个NM上启动AM

3、AM启动后,和RM通讯,请求container来启动executor

4、RM会给AM提供一批container用于启动executor

5、AM连接其他NM启动executor

6、executor启动后向AM反向注册

7、后续的DAGScheduler、TaskScheduler、Shuffle等操作都是和standaloe一样。详见前面的blog

二、yarn-client

yarn-cluster和yarn-client模式剖析

从上图可以看出,yarn-client和yarn-cluster的区别就在于,Driver是运行在本地客户端,它的AM只是作为一个Executor启动器,并没有Driver进程。


看到这里,开头为什么说yarn-client用于测试环境调试程序;yarn-cluster用于生产环境就清楚了。

1、yarn-client,driver运行在本地客户端,负责调度Application,会与yarn集群产生大量的网络通信,从而导致网卡流量激增。好处是,执行时可以在本地看到所有的log,便于调试。所以一般用于测试环境。

2、yarn-cluster,driver运行在NodeManager,每次运行都是随机分配到NM机器上去,不会有网卡流量激增的问题。缺点就是本地提交后看不到log,只能通过yarn application-logs application id命令来查看。比较麻烦。

相关文章: