一、先看看Yarn client的架构示意图架构
Yarn Client首先在Client端启动Driver,就是在Client端跑main函数了,这时候main函数所在的jar包还没提交给Yarn集群。SparkContext开始跑了,而且启动了YarnClientSchedulerBackend。而后YarnClientSchedulerBackend向Yarn提交申请执行ApplicationMaster(spark-yarn工程里的类),Yarn集群找到一台Container来执行ApplicationMaster,注意了:这里和yarn cluster的区别就是在Container上只启动ApplicationMaster,并不会启动Driver,由于已经启动过了。而后ApplicationMaster负责资源分配,调度Container来运行Executor,而且这些被调度启动的Executor是与Client端的Driver进行通讯的。函数
二、再看看Yarn cluster的架构示意图spa
而Yarn cluster就简单的多了,Client端并不执行任何东西,将jar提交给Yarn集群,Yarn集群找到一台Container启动ApplicationMaster,这时候和yarn client的区别就来了,这时候ApplicationMaster会接着启动Driver,也就是说Driver和ApplicationMaster在同一个地方,而后ApplicationMaster进行调度启动的Executor也是同Driver通讯,要注意的点就是这里的Driver和ApplicationMaster在同一个地方,运行在同一个进程内。3d
最后,Yarn client用于调试环境,而Yarn cluster用于生产环境。调试