作业调度与集群资源管理框架YARN 学习目标 . 了解YARN 的体系结构。 . 掌握YARN 命令行的应用方法。 . 熟悉YARN 的API应用编程方法。 . 理解YARN 应用编程实例。 ApacheHadoop的另一种资源协调者(YetAnotherResourceNegotiator,YARN)是 一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资 源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大的 好处。 5.1 YARN 概述 5.1.1 YARN 简介 YARN 的基本思想是将作业跟踪器(JobTracker)的两个主要功能(资源管理和作业 调度/监控)分离,主要方法是创建一个全局的资源管理器(ResourceManager,RM)和若 干针对应用程序的应用程序主控器(ApplicationMaster,AM)。这里的应用程序是指传 统的MapReduce作业或作业的有向无环图(DAG)。 YARN 有下面几大构成组件。 (1)一个全局的资源管理器。 (2)每个节点上的任务和资源管理器(NodeManager,NM)。 (3)每个应用的应用程序主控器。 (4)某个节点上封装多维度资源的资源容器(Container)。 YARN 本质上是分层结构的资源管理器。YARN 控制整个集群并管理应用程序及 分配基础计算资源。资源管理器将各个资源(计算、内存、带宽等)安排给基础的节点管理 器。资源管理器还与应用程序主控器一起分配资源,与节点管理器一起启动和监视它们 的基础应用程序。应用程序主控器承担了以前守护进程的角色,资源管理器承担了作业 跟踪器的角色。 5 (CPU 、 来会带来基于任务的新资源类型( 看,应用程序主控器是用户代码, 器存在错误甚至恶意的攻击, 要想使用一个YARN 集群, 协调一个容器的必要资源, 一个资源请求协议, 应用程序时, 资源管理器注销其容器, 在新的YARN 中, 型编写自己的应用程序主控器, 何让不同的编程模型在Hadmape-iexm rdst. 5.2 YARN 的主要架构 1. YARN 的主要架构如图5 1. 资源管理器 构成:调度器(Sche 87 应用程序主控器负责管理在YARN 内运行的应用程序的每个实例。应用程序主控 器负责协调来自资源管理器的资源,并通过节点管理器监视容器的执行和资源使用 内存等的资源分配) 。请注意:尽管目前的资源(CPU 核心、内存)更加传统,但未 如图形处理单元或专用处理设备) 。从YARN 的角度 因此存在潜在的安全问题。YARN 假设应用程序主控 因此将它们当作无特权的代码对待。 首先需要有包含一个应用程序的客户请求。资源管理器 启动一个应用程序主控器表示已提交的应用程序。通过使用 应用程序主控器协调每个节点上供应用程序使用的资源容器。执行 应用程序主控器监视容器直到完成。当应用程序完成时,应用程序主控器从 执行周期就完成了。 应用程序主控器是一个可变更的部分,用户可以为不同的编程模 让更多类型的编程模型能够在Hadoop集群中运行。如 l配置文档。 oop集群中运行可以参考HadoopYARN 官方配置模板中的 -1所示。 图5-1 YARN 的主要架构 RM 是一个全局的资源管理器,负责整个系统的资源管理和分配,它主要由两个组件 duler)和应用程序管理器(ApplicationManager) 。 调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数 量的作业等),将系统中的资源分配给各个正在运行的应用程序。需要注意的是,调度 器是一个“纯调度器”,它不再从事任何与具体应用程序相关的工作,例如不负责监控 或者跟踪应用的执行状态等,也不负责因重新启动而导致的应用执行失败或者因硬件 故障而产生的失败任务,这些均交由与应用程序相关的应用程序管理器完成。调度器 仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念——— 资源容器(ResourceContainer,简称Container)表示。Container是一个动态资源分配单 位,它将内存、CPU 、磁盘、网络等资源封装在一起,从而限定每个任务使用的资源量。 此外,调度器是一个可插拔的组件,用户可根据自己的需要设计新的调度器。YARN 提供了多种直接可用的调度器,如公平调度器(FairScheduler)和承载量调度器(CapacityScheduler)等。 应用程序管理器负责管理整个系统中所有应用程序管理的操作,包括应用程序提交、 与调度器协商资源以启动应用程序主控器、监控应用程序主控器的运行状态并在失败时 重新启动它等。 2.应用程序主控 器 用户提交的每个应用程序均包含一个AM,其主要功能如下 。 (1)与RM调度器协调,以获取资源(用Container表示)。 (2)将得到的任务进一步分配给内部的任务(资源的二次分配)。 (3)与NM通信,以启动或停止任务。 (4)监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源,以重启 任务。 当前YARN自带两个AM 实现:一个是用于演示AM 编写方法的实例程序 distributedshel,它可以申请一定数目的Container,以并行运行一个shel 命令或脚本;另 一个是运行MapReduce应用程序的AM 。 注意:RM只负责监控AM,在AM运行失败时启动RM,不负责AM内部任务的 容错。 3. 节点管理器 NM是每个节点上的资源和任务管理器。一方面,它会定时向RM汇报本节点上的 资源使用情况和各个Container的运行状态。另一方面,它接收并处理来自AM的 Container启动或停止等各种请求。 4. 容器 容器(Container)是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内 存、CPU 、磁盘、网络等。当AM向RM申请资源时,RM为AM返回的资源便是用 Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该 Container中描述的资源。 YARN的资源管理和执行框架都是按主/从范例实现的。 88 89 对于从节点(Slave),NM 运行和监控每个节点,并向集群的主机(Master)上的RM 报告资源的可用性状态,资源管理器最终为系统中的所有应用分配资源。 特定应用的执行由应用程序主控器控制。应用程序主控器负责将一个应用分割成多 个任务,并和资源管理器协调执行所需的资源。资源一旦分配好,应用程序主控器就和节 点管理器一起安排、执行、监控独立的应用任务。 需要说明的是,YARN 中不同的服务组件通信方式都采用了事件驱动的异步并发机 制,这样可以简化系统的设计。 5.1.3 YARN 架构简析 1. 集中式架构 集中式调度器的特点是资源的调度和应用程序的管理功能全部放到一个进程中完 成。在开源的集中式调度器中,最典型的代表是作业跟踪器的实现,这样设计的缺点是扩 展性差。首先,集群规模受限;其次,新的调度策略难以融入现有代码,如之前仅支持 MapReduce作业,现在要支持流式作业,但很难将流式作业的调度策略嵌入中央调度。 2. 双层调度架构 双层调度器可以克服集中式调度器的不足,它可被看作是一种分而治之的机制或者 策略下放机制。双层调度器仍保留一个经简化的集中式资源调度器,但与具体任务相关 的调度策略则下放到各个应用程序调度器中完成,这种调度器的典型代表是Mesos。 Mesos调度器由两部分组成,分别是资源调度器和框架(应用程序)调度器,资源调度器负 责将集群中的资源分配给各个框架(应用程序),而框架(应用程序)调度器负责将资源进 一步分配给内部的各个任务,用户很容易将一种框架或者系统接入Mesos。 双层调度器的特点是各个框架调度器并不知道整个集群的资源使用情况,只是被动 地接收资源;资源调度器仅将可用的资源推送给各个框架,而由框架自己选择是使用还是 拒绝这些资源;一旦框架接收到新资源,便会进一步将资源分配给其内部的任务,进而实 现双层调度。然而这种调度器也是有缺点的,主要表现在以下两个方面。 (1)各个框架无法知道整个集群的实时资源使用情况。 (2)采用悲观锁,并发粒度小。 5.2 YARN 的命令及应用 5.2.1 YARN 命令概述 YARN 命令通过运行脚本文件bin/yarn执行,如果不带任何参数运行yarn脚本,则 会打印YARN 所有命令的描述。 运行yarn脚本文件的命令语法如下。 yarn [- - config confdir]COMMAND [- - loglevel loglevel][GENERIC _ OPTIONS] [COMMAND_OPTIONS] YARN有一个参数解析框架,采用解析泛型参数以及运行类。YARN命令的参数及 说明如表5-1所示,YARN通用命令项如表5-2所示。 表5- 1 YARN 命令的参数及说明 描述 指定一个默认的配置文件目录,默认值是${HADOOP_PREFIX} /conf 重载Log级别。有效的日志级别包含FATAL 、ERROR 、WARN 、 INFO 、DEBUG和TRACE,默认是INFO YARN支持表5-2的通用命令选项 YARN分为用户命令和管理员命令 表5- 2 YARN 支持的通用命令项 命令参数 - configconfdir - loglevelloglevel GENERIC_OPTIONS COMMAND COMMAND _OPTIONS 通用项 -archives< comma separatedlistof archives> -conf -D= -files -joaroeoreMngr:ot> -libjars 2.用户命令 5.2 描述 用逗号分隔计算中未归档的文件,仅针对Job 指定应用程序的配置文件 使用给定的属性值 用逗号分隔的文件,复制到MapReduce机器,仅针对Job 指定一个资源管理器,仅针对Job 将用逗号分隔的jar路径包含到claspath中,仅针对Job 下面介绍Hadoop集群用户常用的命令。 (1)application,应用程序状态处理。 使用方法:yarnapplication[options]。 application命令选项如表5-3所示。 表5- 3 application命令选项 描述 使用-lit命令,基于应用程序的状态过滤应用程序。如果应用程序的状态有多个,(s) 则用逗号分隔。有效的应用程序状态包含ALL 、NEW 、NEW_ SAVING 、SUBMITTED 、ACCEPTED 、RUNNING 、FINISHED 、 FAILED 、KILLED 使用-list命令,基于应用程序类型过滤应用程序。如果应用程序的类型 -appTypes 有多个,则用逗号分隔 从RM返回的应用程序列表,使用-appTypes参数,支持基于应用程序类 型的过滤;使用-appStates参数,支持对应用程序状态的过滤 90 命令选项 -appStates -list 91 续表 命令选项描 述 -kill 结束运行指定的应用程序 -status 打印应用程序的状态 【例5-1】 列出状态类型为ACCEPTED的应用程序。 命令及运行结果如图5-2所示。 图5-2 例5-1命令及运行结果 从图5-2可以看出,如果系统中没有应用程序运行,则显示总应用数是0。 【例5-2】 列出所有应用程序。 命令及运行结果如图5-3所示。 图5-3 例5-2命令及运行结果 从图5-3可以看出,如果系统中没有应用程序运行,则显示总应用数是0,结果与例5-1 相同。 【例5-3】 终止application_1438998625140_1705应用程序的运行。 命令如下。 [root @ myhadoop Hadoop - 3. 2. 1]# yarn application - kill application _ 1438998625140_1705 (2)applicationattempt用于显示应用程序尝试的报告。 使用方法如下。 yarn applicationattempt [options] 命令选项见表5-4。 表5-4 applicationattempt命令选项 命令选项描 述 -help 帮助 -list 获取应用程序尝试的列表,其返回值ApplicationAttempt-Id等 于plicationAttempt-Idtemp -status 显示应用程序尝试的状态 92 【例5-4】 获取应用程序application_1437364567082_0106尝试列表。 命令如下。 [root @ myhadoop Hadoop - 3. 2. 1]# yarn applicationattempt - list application _ 1437364567082_0106 【例5-5】 显示应用程序尝试的状态。 命令如下。 [root@ myhadoop Hadoop- 3.2.1]# yarn applicationattempt - status appattempt _ 1437364567082_0106_000001 (3)classpath用于显示Hadoop的jar和lib包路径。 使用方法如下。 yarn classpath 【例5-6】 列出Hadoop的所有jar和lib包所在的路径。 命令如下。 [root@myhadoop Hadoop-3.2.1]#yarn classpath 命令的执行结果如图5-4所示。 图5-4 例5-6命令的执行结果 (4)container用于打印Container(s)的报告。 使用方法如下。 yarn container [options] 命令选项如表5-5所示。 表5-5 container命令选项 命令选项描 述 -help 帮助 -list 列出应用程序尝试的Containers -status 打印Container的状态 【例5-7】 列出应用程序尝试的所有Container信息。 93 命令如下。 [root@myhadoop Hadoop- 3.2.1]# yarn container - list appattempt_1437364567082_ 0106_01 【例5-8】 列出Container的状态信息。 命令如下。 [root@myhadoop Hadoop-3.2.1]#yarn container -status appattempt_1437364567082 _0106_01 (5)jar用于将YARN 代码打包和运行jar文件。 使用方法如下。 yarn jar [mainClass]args... (6)logs用于打印Container的日志。 使用方法如下。 yarn logs -applicationId [options] 如果应用程序没有完成,则该命令是不能打印日志的。命令选项如表5-6所示。 表5-6 logs命令选项 命令选项描 述 -applicationId 指定应用程序ID,应用程序的ID 可以在YARN 资源管理器webapp. address配置的路径(即ID)查看 -appOwner 应用的所有者(如果没有指定就是当前用户)可以在YARN 资源管理 器webapp.address配置的路径(即User)查看应用程序的ID -ContainerId ContainerID -help 帮助 -nodeAddress 节点地址的格式为nodename:port (端口由配置文件中的yarn. NodeManager.webapp.address参数指定) 【例5-9】 打印应用程序application_1437364567082_0104的日志信息。 命令如下。 [root @ myhadoop Hadoop - 3. 2. 1]# yarn logs - applicationId application _ 1437364567082_0104 -appOwner myhadoop (7)node用于打印节点的报告。 使用方法如下。 yarn node [options] 命令选项如表5-7所示。 94 表5-7node命令选项 命令选项描述 -all所有节点,不管是什么状态的 -list 列出所有RUNNING状态的节点。支持-states选项过滤指定的状态,节点的 状态包含NEW、RUNNING、UNHEALTHY、DECOMMISSIONED、LOST、 REBOOTED。支持-all显示所有节点 -states 和-list配合使用,用逗号分隔节点状态,只显示这些状态的节点信息 -status 打印指定节点的状态 【例5-10】列出所有节点的所有状态信息。 命令及执行结果如图5-5所示。 图5-5 列出所有节点的所有状态信息的命令及执行结果 【例5-11】列出所有节点状态为RUNNING的信息。 命令及执行结果如图5-6所示。 图5-6 列出所有节点状态为RUNNING的信息的命令及执行结果 【例5-12】列出节点myhadoop:39352的状态信息。 命令及执行结果如图5-7所示。 图5-7 列出节点myhadoop:39352的状态信息的命令及执行结果 95 (8)queue用于打印队列信息。 使用方法如下。 yarn queue [options] 命令选项如表5-8所示。 表5-8 queue命令选项 命令选项描 述 -help 帮助 -status 打印队列的状态 (9)version用于打印Hadoop的版本。 使用方法如下。 yarn version 5.2.3 管理员命令 下面介绍Hadoop集群管理员常用的命令。 (1)daemonlog用于针对指定的守护进程,获取和设置日志级别。 命令语法如下。 yarn daemonlog -getlevel yarn daemonlog -setlevel 命令选项如表5-9所示。 表5-9 daemonlog命令选项 命令选项描 述 -getlevel 打印运行在的守护进程的日志级别。这个命令内部会连 接http:///logLevel? log= -setlevel 设置运行在的守护进程的日志级别。这个命令内部会连 接http:///logLevel? log= (2)nodemanager用于启动节点管理器(NodeManager)。 命令语法如下。 #yarn nodemanager 运行结果部分截图如图5-8所示。 (3)proxyserver用于启动Web代理服务器(proxyserver)。