Hadoop YARN

it2022-05-05  137

文章转载自:https://blog.csdn.net/Mr_HHH/article/details/81127373

1、概述

Yarn的设计目标就是允许我们的各种应用以共享、安全、多租户的形式使用整个集群。 YARN主要有以下几个部分组成:

Global ResourceManager,系统中资源分配的老大(Boss),主要由两部分:Scheduler and ApplicationManager。 1.1 Scheduler:是ResourceManager专门进行资源管理的一个组件,负责分配NodeManager上的Container资源 。 1.2 per-application ApplicationMaster(项目经理) 每个application向RM申请resource 与NM协作一起执行和监视任务 重启失败的任务。per-machine NodeManager(小组长):分配container给作业使用,并且监控作业的运行、资源的使用(cpu、memory…),并把这些情况向RM汇报。 2.1 Container(抽象概念):是Yarn对计算机计算资源的抽象,它其实就是一组CPU和内存资源,也是YARN框架的计算单元。

2、应用提交过程分析

这里从一个任务的提交开始分析这个任务在yarn中的具体流程:

1:用户提交任务到ResourceManager,ResourceManager中包含两个组件,其中一个是Scheduler,另一个是ApplicationManager,这个时候组件ApplicationManager负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。

2:ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了,这个时候,客户端主动和ApplicationMaster交流,应用先向ApplicationMaster发送一个满足自己需求的资源请求,然后ApplicationMaster把这个资源请求以resource-request的形式发送给ResourceManager的Scheduler,Scheduler再在这个原始的resource-request中返回分配到的资源描述Container。ApplicationMaster在得到这些Containers后,还需要与分配Container所在机器上的NodeManager交互来启动Container并运行相关任务,当然Container的分配是需要认证的,以防止ApplicationMaster自己去请求集群资源。

3:应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster。

4:在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议是application-specific协议。

5:一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,最后把所有的Container也归还给系统,任务运行结束!

3、Flink和YARN的交互

启动新的Flink YARN回话时,客户端首先检查所请求的资源是否可用。之后,将包含Flink和配置的jar上传到HDFS(步骤1)。客户端请求(步骤2)RM来启动AM(步骤3)。由于客户端将配置和jar文件注册为容器的资源,因此在该特定机器上运行的YARN的NodeManager将负责准备容器(例如,下载文件)。完成后,将启动AM。该JobManager和AM在同一容器中运行。一旦他们启动成功,AM就知道JobManager(它自己的主机)的地址。AM为TaskManagers生成一个新的Flink配置文件(以便他们可以连接到JobManager)。该文件也上传到HDFS。此外,AM容器还提供Flink的Web界面。YARN代码分配的所有端口都是临时端口,这允许用户并行执行多个Flink YARN回话。之后,AM开始为Flink的TaskManagers分配容器(步骤4),TaskManagers将从HDFS下载jar文件和修改后的配置。完成这些步骤后,即可建立Flink并准备接收作业。

最新回复(0)