【Hadoop系列】(三)YARN的介绍及原理

YARN

1,YARN 概念

YARN(Yet Another Resource Negotiator)是自 Hadoop2.0 之后引入的一个新组件,统一负责集群的资源调度和管理,为 MapReduce 程序分配运算资源。

2,YARN 组件

YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件构成。

img

  • ResourceManager

作为资源管理的核心组件,通常单独部署在一个节点。负责为 client 提交的 job 分配资源,策略是根据应用优先级,队列容量、位置信息等,以共享、安全、多租户的方式提供资源调度服务。

  • NodeManager

该组件负责每个节点的管理。包括节点内所有容器的生命周期管理、资源监控、健康跟踪。

  • ApplicationMaster

client 提交一个任务后,由 YARN 负责向 ResourceManger 申请一个 ApplicationMaster 轻量级线程,具体负责和 ResourceManger 的资源协调,同时监控 NodeManager 资源和运行情况,负责容错处理。根据任务的不同,有 MapReduce ApplicationMaster 和 Giraph ApplicationMasrer 之分。

  • Container

Conotainer 是 YARN 中一种资源抽象,它封装了节点上的内存、磁盘、网络等资源。

image-20210626111328942

3,运行机制

根据上面的描述,RM 和 NM 更多的是一个管理者的角色,执行任务的主要是 AM。所以我们这里详细介绍一下 MRApplicationMaster的运行过程。

img

(一)作业提交阶段

客户端提交任务到集群,YarnRunner 向 ResourceManager 申请一个 Application;任务程序将资源拷贝到 HDFS,提交完毕后申请运行 MRApplicationMaster;

(二)作业初始化阶段

ResourceManager 将请求初始化为 Task,并由调度器(scheduler)分配 container,在 container 内启动应用管理器,启动一个 ApplicationMaster;

(三)任务分配阶段

MRApplicationMaster 从客户端得到计算好的 Spilt 信息,并为之创建对应的 Map 任务以 Reduce 任务;任务优先在本地 JVM 中执行,资源不够时通过心跳机制向 ResourceManager 申请ResourceManager 指定其他的 NodeManager 领取任务创建 Container;

(四)任务执行阶段

NodeManager 创建 Container 并由节点管理器启动 Container ,在 Container 内部由一个 YarnChild 的 Java 应用具体执行 map 或 reduce 任务;

(五)进度和状态维护阶段

YARN 中的任务将其进度和状态返回给应用管理器, 客户端每秒(mapreduce.client.progressmonitor.pollinterval )向应用管理器请求进度更新, 展示给用户。

(六)作业清理阶段

除了向应用管理器请求作业进度外, 客户端每 5 分钟都会通过调用 waitForCompletion() 来检查作业是否完成。时间间隔可以通过 mapreduce.client.completion.pollinterval 来设置。作业完成之后, 应用管理器和 container 会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

猜你喜欢

转载自blog.csdn.net/qq_40589204/article/details/118244588