《Hadoop Yarn权威指南》学习笔记(零)——Yarn核心概念

本文是我读《Hadoop Yarn权威指南》的笔记,文字部分是书上的内容摘录,如有误欢迎指出

yarn的架构图如下

1 ResourceManager

为系统中所有应用分配资源。

有一个可插拔的调度器Scheduler,负责为运行中的各种应用分配资源,使用一个叫Container的抽象概念,其中包括多种资源维度,如CPU、内存、磁盘、网络

Scheduler中有三种调度器

  • FIFO调度器:简单粗暴,先入先出
  • Capacity调度器:管理员使用总槽位或者处理器容量预设多个队列,保证每个队列的最小资源量。当不需要最小容量时,可以提供给饥饿队列。每个队列内使用层次化的FIFO调度多个应用程序。由ACL(访问控制列表)控制用户可以向哪些队列提交作业
  • Fair调度器:资源公平分配给所有应用,使得所有应用在平均时间下得到相等的份额。每个应用都属于某一个队列。Container每次分配都选择使用了最少资源队列中使用最少资源的应用程序。Fair调度器支持层次化队列,每个队列可以拥有子队列,资源以公平方式分配给子队列

2 NodeManager

每台机器的从属进程,负责启动应用的Container,监视资源使用情况并向ResourceManager报道

NodeManager管理集群中独立的计算节点,管理Container的生命周期并监控每个Container资源使用情况,跟踪节点健康状况,管理日志和应用程序附属服务

启动时NodeManager向ResourceManager注册,发送心跳信息并等待指令

3 ApplicationMaster

是YARN中的重要新概念。每个应用程序拥有一个ApplicationMaster,是框架相关的,与Scheduler协商合适的Container,跟踪应用程序状态,监控它们的进度,ApplicationMaster本身也以一个Container身份运行

ApplicationMaster会周期性向ResourceManager发送心跳信息以及更新它的资源需求,随后会收到ResourceManager发送的Container租约。由此更新Applicationmaster的执行计划以适应资源的过剩和不足,Container可以在应用程序执行过程中动态分配和释放

4 资源模型

应用通过ApplicationMaster可以请求到非常具体的资源,例如资源名称、内存量、CPU等

每个资源模型的属性都有最大值和最小值,ApplicationMaster可以请求最小值整数倍的资源Container

5 ResourceRequest和Container

YARN需要允许应用程序共享集群资源,还需要感知集群拓扑提高效率(尽可能减少数据移动)

ResourceManager的Scheduler保存了所有应用程序的资源需求信息,以做出更优资源调度决策

应用程序通过ApplicationMaster请求资源,Scheduler会分配一个Container响应资源需求,ResourceRequest具有如下形式

<资源名称,优先级,资源需求,Container数>

  • 资源名称是资源期望所在的主机名、机架名等信息
  • 优先级是应用程序内部的优先级
  • 资源需求是需要的资源量
  • Container数表示需要几个Container

资源请求的过程如图,第5步是ResourceManager向ApplicationMaster发送资源的最大、最小容量信息,ApplicationMaster再决定如何使用资源

Container本质上是一种资源分配形式,是ResourceManager分配资源的结果,为应用程序授予使用资源的权利

ApplicationMaster负责取走Container并移交给NodeManager

6 Container规范

ApplicationMaster必须向NodeManager提供更多信息启动Container,ResourceManager将分配NodeManager的控制权交给ApplicationMaster。ApplicationMaster独立联系其指定的NodeManager并提供Container Launch Context,包括环境变量、远程存储依赖文件、安全令牌以及启动进程命令。

运行结束后,NodeManager会清理本地工作目录,如果Container还没有退出(包括ApplicationMaster),NodeManager可以接受ResourceManager的指令去杀死剩余Container

7 管理应用程序的依赖文件

当启动一个Container,ApplicationMaster会指定这个Container需要的文件,YARN框架完成这些文件的本地化

以下是一些相关术语解释:

  • Localization: 本地化,拷贝或下载远程资源到本地
  • LocalResource: 运行Container需要的文件和库,例如启动Container需要的库文件、Container启动后需要的配置文件 静态字典文件等,NodeManager启动Container之前将这些资源本地化

7.1 LocalResource

对每种LocalResource,应用程序都可以指定:

  • URL: LocalResource远程地址
  • Size: LocalResource的byte大小
  • Creation timestamp: 远程文件系统上LocalResource创建的时间戳
  • LocalResourceType: 本地化的资源类型,包括FILE,ARCHIVE和PATTERN
  • Patten: PATTERN类型中,提取条目样式
  • LocalResourceVisibility: 指定NodeManager本地化资源可见性,包括PUBLIC(任何用户的Container都可以访问),PRIVATE(同一用户的应用程序共享)和APPLICATION(同一个应用程序的Container共享),可见性由客户端指定

7.2 LocalResource时间戳

NodeManager根据时间戳检测LocalResource是否被修改过,为了避免不一致的问题,YARN会让依赖被修改的远程文件的Container失败

客户端必须填写ApplicationMaster所需要的资源时间戳,ApplicationMaster启动Container时,会向NodeManager指定资源时间戳

7.3 LocalResource生命周期

根据可见度具有不同的生命周期。PUBLIC和PRIVATE的LocalResource在磁盘容量紧张时删除,APPLICATION的LocalResource在应用程序结束后立即删除

猜你喜欢

转载自blog.csdn.net/jiangxuege/article/details/81558975