YARN的两种运行模式

2019-08-22 10:50:42 浏览数 (1)

YARN是一种资源管理机制,可以基于这种资源管理机制运行多种计算框架,比如mapreduce和storm,任何框架与YARN的结合,都必须遵循YARN的开发模式,下图为YARN框架的基本原理。

其中,ResourceManager和NodeManagers是整个计算框架的核心部分,ResourceManager负责资源的分配,将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,Container封装了内存,磁盘和网络,每个任务都会被分配一个Container,该任务使用Container中的资源执行,而NodeManager则是一个计算节点的管理着,负责启动Application所需的Container,并且对对内部资源进行监控,将内存,磁盘,CPU等资源的使用情况汇报给ResourceManager.

YARN运行模式根据Driver在集群中的位置可以分为YARN-Client模式和YARN-Cluster模式。

YARN-Client运行模式如下图所示

值得注意的是,在SparkContext启动过程中,初始化DAGShedular调度器, 初始化YarnScheduler和YarnClientShedularBackend,和启动DriverEndpoint和Client过程,都是在客户端Client过程中进行的。

在spark-submit 脚本提交应用程序可以通过参数列表中--master yarn-client 设置为Yarn-Client模式, YARN-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互, 因为Driver在客户端本地运行, 使得Spark Application 和 客户端进行交互, 可以通过WebUI访问Driver的状态。

YARN-Cluster运行模式如下图所示

在YARN-Cluster运行模式中,当用户向YARN中提交的一个应用程序后,YARN将分为两个阶段运行在该应用程序,第一个阶段是把Spark的Driver作为一个Application Master在YARN集群中先启动,第二个阶段是由Application Master创建应用程序,然后为它向Resource Manager申请资源,并启动Executor运行任务急,监控运行过程。

在YARN-Cluster运行模式下,客户端只负责提交应用程序,这个过程包括启动Application Master命令,提交给Application Mater的程序和需要在Executor中运行的程序等。而关于SparkContext的初始化则是由ResourceManager在收到Client的请求后,在集群中选择一个NodeManager,为该应用程序分配Container,启动Application Master,其中Application Master对SparkContext进行初始化,这是YARN两种运行模式下最直观的区别。而在YARN-Client运行模式下,ResourceManager虽然在收到请求后也会在集群中选择一个NodeManager,并分配Container,并在这个Container中启动Application Master,但是这个Application Master并不运行Spark Context,只是与其建立联系,进行资源的分配。

YARN-Client 与 YARN-Cluster对比

理解YARN-Client和YARN-Cluster的区别, 主要要了解Application Master, 在YARN中,每个Application 实例都有一个Application Master进程, 它是Application启动的第一个容器。它负责和Resource Manager打交道并请求资源,获取资源之后告诉NodeManager 为其启动Container. 所以YARN-Cluster 和 YARN-Client的区别其实就是Application Master进程的区别。

YARN-Client 模式:Application Master仅仅向YARN请求Executor, Client会和请求的Container的通信来调度它们工作,Client是不能离开的。

YARN-Cluster模式:Driver 运行在Application Master中, 它负责向YARN申请资源,并监督作业的运行情况, 当用户提交了作业之后,就可以关于关闭Client,作业会继续在YARN上运行, 因而YARN-cluster模式不适合进行交互式类型的作业。

0 人点赞