Hadoop - YARN 概述

一 概述

Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统。可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大优点。

YARN最初是为了修复MapReduce实现里的明显不足,并对可伸缩性(支持一万个节点和二十万个内核的集群)、可靠性和集群利用率进行了提升。YARN实现这些需求的方式是,把Job
Tracker的两个主要功能(资源管理和作业调度/监控)分成了两个独立的服务程序——全局的资源管理(RM)和针对每一个应用的应用 Master(AM)。这样一个应用要么是传统意义上的MapReduce任务,要么是任务的有向无环图(DAG)。

YARN从某种那个意义上来说应该算做是一个云操作系统,它负责集群的资源管理。在操作系统之上能够开发各类的应用程序,比如批处理MapReduce、流式作业Storm以及实时型服务Storm等。这些应用能够同一时候利用Hadoop集群的计算能力和丰富的数据存储模型,共享同一个Hadoop
集群和驻留在集群上的数据。

此外,这些新的框架还能够利用YARN的资源管理器,提供新的应用管理器实现。

二 YARN的组成

YARN的基本组成

YARN的核心思想 将JobTracker和TaskTacker进行分离,它由以下几大构成组件:

a. 一个全局的资源管理器  ResourceManager

b. ResourceManager的每一个节点代理  NodeManager

c. 表示每一个应用的 ApplicationMaster

d. 每个ApplicationMaster拥有多个Container在NodeManager上执行

以下对它们做一个简单的介绍:

1. ResourceManager(RM)

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications
Manager。ASM)。

调度器  调度器依据容量、队列等限制条件(如每一个队列分配一定的资源,最多运行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。

须要注意的是。该调度器是一个“纯调度器”,它不再从事不论什么与详细应用程序相关的工作,比方不负责监控或者跟踪应用的运行状态等,也不负责又一次启动因应用运行失败或者硬件故障而产生的失败任务,这些均交由应用程序相关的ApplicationMaster完毕。调度器仅依据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(Resource
Container。简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定每一个任务使用的资源量。此外。该调度器是一个可插拔的组件,用户可依据自己的须要设计新的调度器,YARN提供了多种直接可用的调度器,比方Fair Scheduler和Capacity Scheduler等。

应用程序管理器  应用程序管理器负责管理整个系统中全部应用程序,包含应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster执行状态并在失败时又一次启动它等。

2. ApplicationMaster(AM)

用户提交的每一个应用程序均包括一个AM,主要功能包括:

与RM调度器协商以获取资源(用Container表示);

将得到的任务进一步分配给内部的任务(资源的二次分配)。

与NM通信以启动/停止任务。

监控全部任务执行状态,并在任务执行失败时又一次为任务申请资源以重新启动任务。

当前YARN自带了两个AM实现,一个是用于演示AM编写方法的实例程序distributedshell。它能够申请一定数目的Container以并行执行一个Shell命令或者Shell脚本;还有一个是执行MapReduce应用程序的AM—MRAppMaster。

注:RM仅仅负责监控AM,在AM执行失败时候启动它,RM并不负责AM内部任务的容错,这由AM来完毕。

3. NodeManager(NM)

NM是每一个节点上的资源和任务管理器,一方面。它会定时地向RM汇报本节点上的资源使用情况和各个Container的执行状态;还有一方面,它接收并处理来自AM的Container启动/停止等各种请求。

4. Container

Container是YARN中的资源抽象。它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示。YARN会为每一个任务分配一个Container,且该任务仅仅能使用该Container中描写叙述的资源。

注:1. Container不同于MRv1中的slot,它是一个动态资源划分单位。是依据应用程序的需求动态生成的。

2.  如今YARN仅支持CPU和内存两种资源,且使用了轻量级资源隔离机制Cgroups进行资源隔离。

YARN的资源管理和执行框架都是按主/从范例实现的——Slave ---节点管理器(NM)执行、监控每一个节点。并向集群的Master---资源管理器(RM)报告资源的可用性状态,资源管理器终于为系统里全部应用分配资源。

特定应用的运行由ApplicationMaster控制。ApplicationMaster负责将一个应用切割成多个任务。并和资源管理器协调运行所需的资源,资源一旦分配好,ApplicationMaster就和节点管理器一起安排、运行、监控独立的应用任务。

须要说明的是。 YARN不同服务组件的通信方式採用了事件驱动的异步并发机制,这样能够简化系统的设计。

四 YARN 架构简析

集中式架构

集中式调度器(Monolithic Schuduler)的特点是,资源的调度和应用程序的管理功能所有放到一个进程中完毕,开源界典型的代表是MRv1 JobTracker的实现。

这样设计的缺点非常明显,扩展性差:首先,集群规模受限;其次。新的调度策略难以融入到现有代码中,比方之前仅支持MapReduce作业,如今要支持流式作业,而将流式作业的调度策略嵌入到中央调度当中是一项非常难的工作。

双层调度架构

为了客服集中式调度器的不足,双层调度器是一种非常easy被想到的解决之道。它可看作是一种分而治之的机制或者是策略下放机制:双层调度器仍保留一个经简化的集中式资源调度器,但详细任务相关的调度策略则下方到各个应用程序调度器完毕。

这样的调度器的典型代表是Mesos或YARN。

Mesos调度器由两部分组成。各自是资源调度器和框架(应用程序)调度器,当中,资源调度器负责将集群中的资源分配给各个(应用程序),而框架(应用程序)调度器负责将资源进一步分配给内部的各个任务。用户非常easy将一种框架或者系统接入Mesos.

双层调度器的特点是:各个框架调度器并不知道整个集群资源使用情况,仅仅是被动地接受资源;资源调度器仅将可用的资源推送给各个框架,而由框架自己选择是使用还是拒绝这些资源;一旦框架接受到新资源,再进一步将资源分配给其内部的任务,进而实现双层调度。然而这样的调度器也是有缺点。主要表如今下面两个方面:1.各个框架无法知道整个集群的实时资源使用情况;採用悲观锁,并发粒度小。

具体介绍能够參考这篇论文:

http://eurosys2013.tudos.org/wp-content/uploads/2013/paper/Schwarzkopf.pdf

五 小结

随着YARN的不断发展和完好,各种类型的应用程序。包含类似MapReduce的短作业、类似Web
Service的长作业等。均可直接部署和执行在YARN上,当前YARN对外提供的接口均是底层接口,这给用户编写和调试应用程序带来了非常大的麻烦,比方无法聚集分散在各个节点上的应用程序日志、应用程序生命周期难以管理、缺乏第三方工具将一个现有的系统执行在YARN上等。仅仅有这些问题都得到非常好的解决,YARN才干够走向成熟。

时间: 2024-08-15 17:35:20

Hadoop - YARN 概述的相关文章

Hadoop -YARN 应用程序设计概述

一概述 应用程序是用户编写的处理数据的统称,它从YARN中申请资源完成自己的计算任务.YARN自身对应用程序类型没有任何限制,它可以是处理短类型任务的MapReduce作业,也可以是部署长时间运行的服务的应用程序.应用程序可以向YARN申请资源完成各类计算任务. 在YARN上开发一个应用程序,通常而言,需要开发两个组件,分别是客户端和ApplicationMaster,其中客户端主要作用是将应用程序提交到YARN上,并与YARN 和Application Master进行交互,查询应用程序的状态

Apache Hadoop YARN: 背景及概述

从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache Hadoop由下面四个子工程组成: Hadoop Comon:核心库,为其他部分服务 Hadoop HDFS:分布式存储系统 Hadoop MapReduce:MapReduce模型的开源实现 Hadoop YARN:新一代Hadoop数据处理框架 概括来说,Hadoop YARN的目的是使得Hado

YARN分析系列之二 -- Hadoop YARN各个自模块说明

先做如下声明,本代码版本是基于 3.1.2 版本. 其实,我们自己在写代码的时候,会有意识地将比较大的功能项独立成包,独立成module, 独立成项目,项目之间的关系既容易阅读理解,又便于管理. 如下,是hadoop-yarn-project的module截图: Hadoop YARN 的大部分功能在 hadoop-yarn-project module 下,现将该module下各个module 的功能做一个大致的说明[顺序按上面截图自上而下]: hadoop-yarn-api:YARN的跨平台

决胜大数据时代:Hadoop&Yarn&Spark企业级最佳实践(8天完整版脱产式培训版本)

Hadoop.Yarn.Spark是企业构建生产环境下大数据中心的关键技术,也是大数据处理的核心技术,是每个云计算大数据工程师必修课. 课程简介 大数据时代的精髓技术在于Hadoop.Yarn.Spark,是大数据时代公司和个人必须掌握和使用的核心内容. Hadoop.Yarn.Spark是Yahoo!.阿里淘宝等公司公认的大数据时代的三大核心技术,是大数据处理的灵魂,是云计算大数据时代的技术命脉之所在,以Hadoop.Yarn.Spark为基石构建起来云计算大数据中心广泛运行于Yahoo!.阿

Hadoop YARN资源隔离技术

YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgroups进行资源控制,Cgroups控制资源测试可以参见这篇博文Cgroups控制cpu,内存,io示例,内存资源隔离除Cgroups之外提供了另外一个更灵活的方案,就是线程监控方案. 默认情况下YARN采用线程监控的方案控制内存使用,采用这种机制的原因有两点: 1.Java创建子进程采用了"for

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps Hadoop2.6.0编程问题与解决

从hadoop 1.2.1升级到 Hadoop2.6.0,调试写代码,还是遇到一些问题的.这里记录一下,后续如果自己再遇到类似问题,那也好找原因了. 在eclipse里编译运行 WordCount,出现以下错误. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/util/Apps at java.lang.ClassLoader.defineClass1(Native M

hadoop yarn 运行wordcount时执行完成,但是返回错误

错误信息如下: 15/09/05 03:48:02 INFO mapreduce.Job: Job job_1441395011668_0001 failed with state FAILED due to: Application application_1441395011668_0001 failed 2 times due to AM Container for appattempt_1441395011668_0001_000002 exited with exitCode: 1 F

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2

Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2 .mobi: http://www.t00y.com/file/79497801 Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2.pdf: http://www.t00y.com/file/8034244

hadoop错误org.apache.hadoop.yarn.exceptions.YarnException Unauthorized request to start container

错误: 14/04/29 02:45:07 INFO mapreduce.Job: Job job_1398704073313_0021 failed with state FAILED due to: Application application_1398704073313_0021 failed 2 times due to Error launching appattempt_1398704073313_0021_000002. Got exception:     org.apache