Spark的Yarn CLuster与Yarn Client区别

一、Yarn Cluster模式

Spark的Yarn CLuster与Yarn Client区别

二、Yarn Client模式

Spark的Yarn CLuster与Yarn Client区别

        对比两种模式的架构图,可以看出,两者的本质区别:AM进程的区别。

        Cluster模式下,driver运行在AM中,负责向Yarn(RM)申请资源,并监督Application的运行情况,当Client(这里的Client指的是Master节点)提交作业后,就会关掉Client,作业会继续在yarn上运行,这也是Cluster模式不适合交互类型作业的原因。而Client模式,AM仅向Yarn(RM)申请executor资源,之后Client会和请求的Container通信来进行任务的调度,即Client不能被关闭

        在工作当中,常常采用的工作方式是,先在Client模式下调通项目,然后再将项目提交到Cluster下运行。所以,跑一些SparkSQL程序的时候,经常会遇到类似的问题:为什么Client可以跑通程序,而放到Cluster上,就报错呢?

        上面也提到过,Client模式下,如果Master提交任务,那么Driver运行在Master上,数据一般存在于Hive或者Mysql上,Master节点都会有它们的访问权限,在任务交互过程中,Driver可以通过Master获取数据的元信息,然后直接从数据库获取相关数据;相反,Cluster模式下,Driver运行在AM上,即运行在NodeManager(从节点)上,往往从节点是没有数据库的访问权限,所以造成Client可以跑通程序,而放到Cluster上,就报错。解决的方法就是将数据库的而访问权限也赋给从节点的机器。