# Spark基础架构

## YARN Cluster模式

1. 在命令行提交作业
2. YARN集群中的Resource Manager在众多Node Manager中挑一个启动Application Master，并在该节点中创建SparkContext，作为Driver节点
3. 在AM（Application Master）启动后并将自己注册为一个YARN AM之后，才会开始执行用户提交的application。AM会通过YARN RM和NM的接口在集群中启动若干容器，用于启动Executor
4. 成功申请到资源并启动Executor之后，Driver与Executor通过Akka应用进行消息接受和发送

![](https://ipasser.oss-cn-beijing.aliyuncs.com/images/blog20201101172336.png)

## YARN Driver模式

1. 在命令行提交作业
2. YARN RM请求启动ApplicationMaster，但是这里的ApplicationMaster其实只是一个ExecutorLauncher，但是它的功能是很有限的
3. 在AM启动后，会向RM申请container，RM分配一批container，AM连接NM，然后在NM上启动Executor，但是此时Executor并不像cluster模式那样去向AM反向注册，此时Executor会向本地的Driver机器去注册
4. 成功申请到资源并启动Executor之后，Driver与Executor通过Akka应用进行消息接受和发送

![](https://ipasser.oss-cn-beijing.aliyuncs.com/images/blog20201101172632.png)

对比一下两种模式

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

2、yarn-cluster用于生产环境，因为driver运行在nodemanager，没有网卡流量激增的问题，缺点在于调试不方便，本地用spark-submit提交之后，看不到log，只能通过yarn application -logs application\_id 这种命令来查看，不方便。

> 相关博客：
>
> <https://blog.csdn.net/baidu_35901646/article/details/81612164>
>
> <https://www.jianshu.com/p/e8d806506578>
>
> <https://zhuanlan.zhihu.com/p/61902619>
>
> 相关书籍：
>
> 《Spark技术内幕》
>
> 《Apache Spark源码剖析》
