专业的编程技术博客社区

网站首页 > 博客文章 正文

大数据基础学习11-YARN基础(大数据基础课程简介)

baijin 2024-10-14 08:14:19 博客文章 12 ℃ 0 评论

YARN是什么

前面介绍Hadoop的时候说过,YARN是Hadoop的组成的一个模块,是Hadoop的集群资源管理器系统。它是Yet Another Resource Negotiator的缩写,直译的意思是"另一种资源调度器"。YARN是从Hadoop 2.X引入的,最初是为了改善MapReduce的实现,但是它具有通用性,同样执行其他分布式计算模式

作为Apache Hadoop的核心组件之一,YARN负责将系统资源分配给在Hadoop集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。

需要注意的是,在YARN中我们把job的概念换成了application,因为在新的Hadoop2.x中,运行的应用不只是MapReduce了,还有可能是其它应用如一个DAG(有向无环图Directed Acyclic Graph,例如storm应用)。YARN的另一个目标就是拓展Hadoop,使得它不仅仅可以支持MapReduce计算,还能很方便的管理诸如HiveHbasePigSpark/Shark等应用。这种新的架构设计能够使得各种类型的应用运行在Hadoop上面,并通过YARN从系统层面进行统一的管理,也就是说,有了YARN,各种应用就可以互不干扰的运行在同一个Hadoop系统中,共享整个集群资源,如下图所示:

YARN的架构

Yarn从整体上还是属于master/slave模型,主要依赖于三个组件来实现功能

  1. ResourceManager(RM): 是集群资源的仲裁者,它包括两部分:一个是可插拔式的调度Scheduler,一个是ApplicationManager,用于管理集群中的用户作业。
  2. NodeManager: 每个节点上的NodeManager,管理该节点上的用户作业和工作流,也会不断发送自己Container使用情况给ResourceManager
  3. ApplicationMaster(AM): 用户作业生命周期的管理者,它的主要功能就是向ResourceManager(全局的)申请计算资源(Containers)并且和NodeManager交互来执行和监控具体的task。架构图如下:

YARN 的基本思想是将资源管理和作业调度/监视的功能分解为单独的daemon(守护进程),其拥有一个全局 ResourceManager(RM) 和每个应用程序的 ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的DAG。

ResourceManagerNodeManager构成了数据计算框架。 ResourceManager 是在系统中的所有应用程序之间仲裁资源的最终权限。NodeManager是每台机器框架代理,负责Containers,监视其资源使用情况(CPU,内存,磁盘,网络)并将其报告给ResourceManager

每个应用程序ApplicationMaster实际上是一个框架特定的库,其任务是协调来自ResourceManager的资源,并与NodeManager 一起执行和监视任务。

Container:

Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。任何一个 job 或 application必须运行在一个或多个Container中,在Yarn 框架中,ResourceManager 只负责告诉 ApplicationMaster哪些Containers可以用,ApplicationMaster 还需要去找NodeManager请求分配具体的Container。

一个Container就是一组分配的系统资源,现阶段只包含两种系统资源(之后可能会增加磁盘、网络等资源。

YARN应用提交过程

Application在YARN中的执行过程,整个执行过程可以总结为三步:

  1. 应用程序提交
  2. 启动应用的ApplicationMaster实例
  3. ApplicationMaster实例管理应用程序的执行

具体提交过程:

1.客户端程序向 ResourceManager 提交应用并请求一个 ApplicationMaster 实例;

2.ResourceManager找到一个可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例;

3.ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager 获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了(这个时候,客户端主动和 ApplicationMaster 交流,应用先向 ApplicationMaster 发送一个满足自己需求的资源请求);

4.在平常的操作过程中,ApplicationMaster根据 resource-request协议向ResourceManager 发送resource-request请求;

5.当Container被成功分配后,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动Container,container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料;

6.应用程序的代码以task形式在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster;

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

8.一旦应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统。

Tags:

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

欢迎 发表评论:

最近发表
标签列表