专业的编程技术博客社区

网站首页 > 博客文章 正文

YARN-Hadoop资源管理调度框架-深入理解系统架构和工作流程

baijin 2024-10-14 08:13:27 博客文章 7 ℃ 0 评论

YARN (Yet Another Resource Negotiator,另一种资源协调者)

YARN是Hadoop 2.0 中新增的资源管理调度框架,就是将MR v1中的JobTracker的职责进行拆分,将资源管理和任务调度监控拆分成独立的进程:一个全局的资源管理和一个每个作业的管理(ApplicationMaster)。ResourceManager和NodeManager提供了计算资源的分配和管理,而ApplicationMaster则完成应用程序的运行。

YARN体系架构

YARN 体系架构中包含了3个组件:

  • ResourceManager
  • ApplicationMaster
  • NodeManager

下图中,Container 是资源申请的单位和任务运行的容器。

ResourceManager(RM)是一个全局的资源管理器,负责整个系统的资源管理和分配,主要包括2个组件:

  • 调度器(Scheduler)-负责资源管理和分配;
  • 应用管理器(Applications Manager)-负责系统中所有应用程序的管理工作,主要包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动等等。

ApplicationMaster的主要功能:单个作业的资源管理和任务监控。

(1)当用户作业提交时,ApplicationMaster和ResourceManager协商获取资源,ResourceManager会以容器的形式为ApplicationMaster分配资源;

(2)把获得的资源进一步分配给内部的各个任务(Map任务或Reduce任务),实现资源的二次分配;

(3)与NodeManager保持交互通信,进行应用程序的启动、运行、监控和停止,监控申请到的资源的使用情况,对所有任务的执行进度和状态进行监控,并在任务发生失败时执行恢复;

(4)定时向ResourceManager 发生心跳消息,报告资源的使用情况和应用的进度信息;

(5)在作业完成时,ApplicationMaster向ResourceManager 注销容器,执行周期完成。

NodeManager:单个节点的资源管理和监控。

NodeManager 是驻留在一个YARN集群中的每个节点上的代理,主负责容器声明周期管理,监控每个容器的资源(CPU/MEM等)的使用情况,跟踪节点监控健康状况,并以心跳的方式与ResourceManager 保持通信。

NodeManager 主要负责管理抽象的容器,只处理与容器相关的事情,而不具体负责每个任务(Map任务或Reduce任务)自身状态的管理,因为这些管理工作是由ApplicationMaster 完成的。

YARN组件和Hadoop集群其他组件的部署关系

在集群部署方面,YARN各个组件和Hadoop 集群中的其他组件是进行统一部署的。

如下图所示:

  • YARN的ResourceManager 组件和HDFS 的名称节点(NameNode)部署在一个节点上。
  • YARN的ApplicationMaster和NodeManager组件是和HDFS中的数据节点(DataNode)部署在一个节点上。
  • YARN中的容器(Container),代表了CPU、Mem、网络等资源,也是和HDFS中的数据节点在一起。

YARN 工作流程

在YARN框架中,执行一个MapReduce应用程序时,分为2个阶段运行该应用程序:

第一个阶段是启动ApplicationMaster;

第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。

从提交到完成,具体经历了如下几个步骤:

1. 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

2. ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3. ApplicationMaster首先向ResourceManager注册,这样用户就可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5. 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

6. NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

8. 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

YARN 统一资源管理调度框架

Hadoop 集群是基础,其中的HDFS提供文件存储,YARN进行资源调度管理,为上层的各种计算框架提供统一的资源管理调度服务。

可以运行在YARN 之上的计算框架,包括:

  • 离线批处理框架 MapReduce;
  • 内存计算框架Spark;
  • 流计算框架 Storm和Flink;
  • DAG计算框架 Tez;

和YARN一样提供类似功能的资源管理和调度框架,还有Mesos等。

欢迎关注,一起沟通交流大数据相关的学习心得和项目经验。谢谢!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表