Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析相关的知识,希望对你有一定的参考价值。

参考技术A

转至: https://www.cnblogs.com/ITtangtang/p/7967386.html

每个Spark executor作为一个YARN容器(container)运行。Spark可以使得多个Tasks在同一个容器(container)里面运行

1. Spark支持资源动态共享,运行于Yarn的框架都共享一个集中配置好的资源池

2. 可以很方便的利用Yarn的资源调度特性来做分类、隔离以及优先级控制负载,拥有更灵活的调度策略

3. Yarn可以自由地选择executor数量

4. Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以运行于Kerberized Hadoop之上,在它们进程之间进行安全认证

我们知道Spark on yarn有两种模式:yarn-cluster和yarn-client。这两种模式作业虽然都是在yarn上面运行,但是其中的运行方式很不一样,今天就来谈谈Spark on YARN yarn-client模式作业从提交到运行的过程剖析

Spark运行模式:

在Yarn-client中,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。

因为Driver在客户端,所以可以通过webUI访问Driver的状态,默认是 http://hadoop1:4040 访问,而YARN通过http:// hadoop1:8088访问

因为是与Client端通信,所以Client不能关闭。

客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。

应用的运行结果不能在客户端显示(可以在history server中查看),所以最好将结果保存在HDFS而非stdout输出,客户端的终端显示的是作为YARN的job的简单运行状况,下图是yarn-cluster模式

[图片上传失败...(image-107978-1592274191581)]

执行过程:

比以前的更多的理解:
(1)Application Master所在的NodeManager是Yarn随机分配的,不是在主节点上,下图是实验室集群上跑得一个Spark程序,tseg0是主节点,tseg1~tseg4是workers,IP10.103.240.29指的是tseg3:

(2)在上图还可以看出,executor的容器和AM容器是可以共存的,它们的封装都是容器;
(3)AM是Yarn启动的第一个容器;
(4)AM所在的NodeManager就是平常说的Driver端,因为这个AM启动了SparkContext,之前实验室说的“谁初始化的SparkContext谁就是Driver端”一直理解错了,以为这句话是相对于机器说的,但其实是相对于Cluster和Client的集群模式来说的(不知道其他模式Mesos、standalone是不是也是这样)。
(5)在Application提交到RM上之后,Client就可以关闭了,集群会继续运行提交的程序,在实际使用时,有时候会看到这样一种现象,关闭Client会导致程序终止,其实这个Application还没有提交上去,关闭Client打断了提交的过程,Application当然不会运行。

(1)YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在RM的机器上;
(2)而Driver会和Executors进行通信,所以Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以;
(3)Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

下表是Spark Standalone与Spark On Yarn模式下的比较

Spark on yarn的两种模式 yarn-cluster 和 yarn-client

从深层次的含义讲,yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行。然而yarn-cluster模式不适合运行交互类型的作业。而yarn-client模式下,Application Master仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离开。看下下面的两幅图应该会明白(上图是yarn-cluster模式,下图是yarn-client模式):

                     

            

以上是关于Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析的主要内容,如果未能解决你的问题,请参考以下文章

spark基于yarn的两种提交模式

Spark on YARN两种运行模式介绍

Spark记录-Spark On YARN内存分配(转载)

配置Spark on YARN集群内存

Spark on Yarn 流程

spark on yarn