我爱编程

YARN 权威指南 NOTE1

2018-05-23  本文已影响61人  raincoffee

YARN 权威指南 NOTE1

本文主要是阅读《HADOOP YARN 权威指南》所记录的学习笔记。整体来说,该书主要介绍了YARN的基础知识,包括YARN的使用,安装,架构等。不涉及代码实现。

如今,越来越多的应用迁移到yarn上。MR on yarn, Spark on yarn, Hbase on yarn, storm on yarn 。这些系统借助yarn获得了更好的资源调度,资源隔离,弹性伸缩,容灾容错等。

1. YARN组件(第三章 YARN的核心概念)

1.1 ResourceManager

是一个调度器,根绝应用程序的资源请求严格的限制系统的可用资源

1.2 ApplicationMaster

实际上是一个特定框架的实例。负责与ResourceManager协商资源,并合NodeManager协同工作来执行和监控Container以及他们的资源消耗。它有责任与ResourceManager协商并获取合适的资源container,跟踪他们的状态,以及监控他们的进程。

1.3 Container

一个ApplicationMaster可以请求非常具体的资源。

一个应用程序通过ApplicationMaster请求特定的资源需求来满足他的资源需求,Scheduler会分配一个container来响应资源请求。

一个ResourceRequest具有如下形式 <资源名称,优先级,资源需求,container数量>

本质上container是一种资源分配形式。container只是使用服务器行指定资源的权利。ApplicationMaster必须提供更多的信息给NodeManager才能启动Container。Container的启动API是和平台无关的,包括:

2. YARN组件的功能概述(第四章 YARN组件的功能概述)

2.1 YARN Scheduler概述

2.2 Container

Container是单个节点上如RAM CPU核核磁盘等物理资源的集合。

2.3 NodeManager

是yarn节点上的“工作进程”的代理。管理计算节点,职责包括和ResourceManager保持通信,管理container的生命周期。监控container的资源使用情况。

在启动的时候向ResourceManager注册,然后发送包含自身的心跳,并等待来自ResourceManager的指令。它的主要目标是管理ResourceManager分配给他的container

2.4 ApplicationMaster

与ResourceManager协商资源

与NodeManager系统工作来执行监控任务

2.5 资源模型

image

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

当启动一个container时候,ApplicationMaster可以指定该Container需要的所有文件。因此,这些文件都应该被本地化。

可见行

localResource生命周期

3. 基本的YARN管理(第六章 YARN的管理)

4. YARN 的架构指南(第七章 YARN的架构指南)

4.1 ResourceManager

image

4.2 NodeManager

image

NodeManager的重要功能:

4.3 ApplicationMaster

每个应用程序的ApplicationMaster都是一个引导进程,一旦应用程序的提交通过了,且自身加载完成,他就启动所有工作。

image

一旦AM成功启动,将负责一下内容:

4.4 Container

container运行环境

5 YARN Capacity调度器(第八章 YARN中Capacity调度器)

Capacity通过队列的容量属性,最小用户占比和限制属性来支持这些特征。他的目的是共享一个单个的yarn集群,同时保证每个组织所分配的容量。为了提高利用率,组织可以使用属于其他组织的闲用资源。Capacity也执行严格的限制来避免单个应用程序,用户或者队列独占集群从而影响其他租户。

YARN中的调度是更细粒度和动态的。YARN中的队列仅是一个物理节点上一个逻辑资源图。

5.1 配置

Yarn-site.xml中配置

yarn.resourcemanager.scheduler.class: xxx.xxx.xxx.CapacityScheduler

命令 yarn readmin -refreshQueue 重新加载配置文件

5.2 队列

YARN中一个基本的调度单元是队列。一个队列或者是多个用户提交的应用程序的逻辑集合,或是多个队列的逻辑集合。

5.3 层级队列

层级队列确保首先保证子队列共享组织的资源,然后才允许其他组织使用该队列空闲的资源。这种设计使每个组织有更多的控制权保证他们资源以可预见的方式使用。调度算法的工作方式如下:

image

层级队列的配置

5.4 层次队列Capacity管理

xxx

5.5 用户级别限制

字队列具有额外的责任来确保调度由不同的用户提交到该队列应用程序的公平性。在Capacity中用户只被允许提交任务到子队列中。

针对叶子队列 进行用户限制。所有用户的限制都是基于队列的容量。minimum-user-limit-percent ,表示只用来决定一个用户最少能占用队列容量的比例。

5.6 预定

虽然一个节点上有空闲资源,但是在大小上他们还不足以满足最优先的应用程序的资源请求。这种情况通常发生在大内存的应用程序。当这样的程序在籍群众运行时,一个普通程序的container运行结束后,从而释放前面使用的资源进入调度的周期,节点将用有空闲的资源,但是大内存应用程序并不能利用到他们,因为资源仍然太小。如果任其发展,这种会造成资源密集型应用程序的饥饿。

通过预定的功能,capacity调度器解决了这个问题。对于拥有预定的调度器调度流程如下:

  1. 当一个节点报告完成了一个container,从而增加一定量的空闲可用资源。调度器根据容量和最大容量选择合适的队列。

  2. 在该队列,调度通过FIFO顺序选择应用程序,同时要考虑用户级别限制。一旦找到一个有资源需求的应用程序,检查该节点的空闲容量是否满足该应用程序的资源需求。

  3. 如果大小不匹配,capacity调度器立即在该节点珊瑚创建一个container的预定

  4. 一旦一个节点上为一个应用程序创建一个预定,调度器就不会把资源分配给其他队列,应用程序,或者container,直到该container预定的资源需求得到满足。

  5. 有预定的节点最终回报告有足够的container已经结束。这样该节点的空闲资源能够匹配预定的大小。这时,capacity把预定标记为完成。然后删除这个预定,并在该节点上分配一个container。

  6. 与此同时,其他节点可以满足该应用程序的资源需求,这样该程序可能不需要之前的预定。这样的情况下,当下一次为预定的节点做调度时,就取消这个预定。

  7. 为限定预定的数量无限增长,防止潜在的调度死锁。capacity限定每个节点只能有一个活跃的预定来解决这个问题。

5.7 队列状态

5.8 应用程序的限定

yarn.scheduler.capacity.maximum-applications: 活跃应用程序的总数。

yarn.scheduler.capacity.<queue-path>.maximum-applications:每个队列最大允许应用程序总数。

上一篇下一篇

猜你喜欢

热点阅读