kafka面试指南

Spark On Yarn的两种模式yarn-cluster和y

2020-06-16  本文已影响0人  AlexYao

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

Spark On Yarn的优势

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

image

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模式作业从提交到运行的过程剖析

相关概念

    1. Standalon : spark原生的资源管理,由Master负责资源的分配
    2. Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
    3. Hadoop Yarn: 主要是指Yarn中的ResourceManager
    1. Spark on Standalone模式为TaskScheduler
    2. YARN-Client模式为YarnClientClusterScheduler
    3. YARN-Cluster模式为YarnClusterScheduler

Spark运行模式:


YARN-Client

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

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

image image

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

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

Yarn-Cluster

  1. 第一个阶段是把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;
  2. 第二个阶段是由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成

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

image

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

执行过程:

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

image

(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当然不会运行。

YARN-Cluster和YARN-Client的区别

(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模式下的比较


image.png

Reference

  1. 《Spark技术内幕-深入解析Spark内核、架构设计与实现原理》
  2. Spark Yarn-cluster与Yarn-client
  3. Spark:Yarn Cluster 和Yarn Client的区别和联系
  4. Spark on YARN两种运行模式介绍
  5. Apache Spark Resource Management and YARN App Models
上一篇 下一篇

猜你喜欢

热点阅读