YARN 运行机制

原文链接: https://my.oschina.net/firepation/blog/2966517

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. YARN 整体架构

YARN 框架是 hadoop 的资源管理器,在介绍它的运行机制之前,我们先了解一下 YARN 中几个基础组件:Resource Manager、Node Manager、Container 以及 AppMaster。

ResourceManager:ResourceManager 在整个集群中就只有一个,其主要负责和客户端进行通信,为每个节点进行资源的调度以及分配,与 AppMaster 一起进行资源的分配。

NodeManager:YARN 中每个节点都存在一个 NodeManager,其主要对容器中的资源进行监控,处理来自 AppMaster 和 ResourceManager 的命令。

AppMaster: ApplicationMaster 管理在 YARN 中运行的每个应用程序实例。还负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源的使用(CPU、内存等的资源分配)。

Container:Container 是 YARN 中的资源抽象,它包含了很多纬度,如内存、CPU、网络等。Resource Manager 为 AppMaster 返回的资源便是用Container 表示的。YARN 会为每个任务分配一个 Container,且该任务只能使用该Container中描述的资源。

YARN 的架构图如下:

YARN 运行机制_第1张图片

2. YARN 运行机制

了解了 YARN 的整体架构之后,我们再来看看 YARN 的运行机制,先用一张图表示 YARN 的运行机制,稍后再对其中的步骤一一进行说明:

YARN 运行机制_第2张图片

我们在这样的场景下讨论 YARN 的运行机制:当写了一个 MapReduce 程序时,利用 hadoop jar 命令提交给 hadoop,在提交的 jar 包中会包含一个 main 方法,main 中的 job.waitforcompletion 代码会启动 RunJar 的进程,YARN 的资源调度是通过 RunJar 进程来完成。

2.1 作业提交

RunJar 进程会向集群提交 job,Resource Manager 会为本次 job 提供一个 jobID,还会返回本次作业提交的资源路径 staging-dir。接着,客户端将资源(包括Jar包, 配置文件,)提交到 HDFS 中,最后,通过调用 ResourceManager 的 submitApplication 方法来提交作业。

2.2 作业初始化

提交完成之后,ResourceManager 会将本次作业添加到一个任务队列中,然后将这些任务分配给各个 NodeManager 中,并且为每个 NodeManager 创建一个的资源容器。创建完成之后,ResourceManager 会在容器内启动 AppMaster 进程,启动完成之后在 ResourceManager 中进行注册,这样就保持了 ResourceManager 和 AppMaster 的通信。

2.3 任务分配

由创建的 AppMaster 去分配在哪些 NameNode 上运行 map 和 reduce 程序,运行 map 和 reduce 的程序会从 HDFS 中获取相关的资源再执行 map 和 reduce 程序,这个进程为 YarnChild。任务完成之后,AppMaster 向 ResourceManager 注销自己,ResourceManager 会回收相关的资源。

以上便时 YARN 运行时的整体流程。

转载于:https://my.oschina.net/firepation/blog/2966517

你可能感兴趣的:(YARN 运行机制)