1、 Yarn的介绍

YARN的基本思想是将JobTracker的两个主要功能(资源管理和 作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的 ApplicationMaster(AM)。这里的应用程序是指传统的MapReduce作业或作业的DAG(有向无环图)。

YARN 分层结构的本质是 ResourceManager。这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。ResourceManager 还与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。

ApplicationMaster 管理一个在 YARN 内运行的应用程序的每个实例。   ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元或专用处理设备)。从 YARN 角度讲,ApplicationMaster 是用户代码,因此存在潜在的安全问题。

NodeManager 管理一个 YARN 集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。YARN 继续使用 HDFS 层。它的主要 NameNode 用于元数据服务,而 DataNode 用于分散在一个集群中的复制存储服务。

要使用一个 YARN 集群,首先需要来自包含一个应用程序的客户的请求。ResourceManager 协商一个容器的必要资源,启动一个 ApplicationMaster 来表示已提交的应用程序。通过使用一个资源请求协议,ApplicationMaster 协商每个节点上供应用程序使用的资源容器。执行应用程序时,ApplicationMaster 监视容器直到完成。当应用程序完成时,ApplicationMaster ResourceManager 注销其容器,执行周期就完成了。

2、 Yarn的模块功能

ResourceManager

(1)处理客户端的请求

(2)启动和监控ApplicationMaster

(3)监控NodeManager

(4)资源分配与调度

NodeManager

(1)单个节点上的资源管理

(2)处理来自ResourceManager的命令

(3)处理来自ApplicationMaster的命令

ApplicationMaster

(1)数据的切分,在1.x系列里每个切块大小是64M,在2.x系列里是128M

(2)为应用程序申请资源,并分配给内部任务

(3)任务的监控和容错

Container

(1)对任务运行环境的抽象,封装了cpu,内存等多维资源以及环境变量

(2)启动命令等任务运行相关的信息

3、 Hadoop2.x的Hdfs  +  Yarn的框架

我么知道MRv1存在的主要问题是:在运行时,JobTracker既负责资源管理又负责任务调度,这导致了它的扩展性、资源利用率低等问题。MRv1是围绕着MapReduce进行,并没有过多地考虑以后出现的其它数据处理方式 。按着图3-1左的设计思路,我们每开发一种数据处理方式(例如Spark),都要重复实现相应的集群资源管理和数据处理。因此,Yarn就很自然的被开发出来了。Yarn对MRv1的最大改进就是将资源管理与任务调度分离,使得各种数据处理方式能

共享资源管理。

图 3-1 Hadoop1.0和2.0

Yarn是一种统一资源管理方式,是从MRv1中的JobTracker分离出来的。这样的好处显而易见:资源共享,扩展性好等。
    MRv1与Yarn的主要区别:在MRv1中,由JobTracker负责资源管理和作业控制,而Yarn中,JobTracker被分为两部分:ResourceManager(RM)和ApplicationMaster(AM),如图3-2:

图 3-2 Yarn 的架构图

从图3-2中,我们可以清晰的看到 ,对于MRv1无论是资源管理里还是任务调度都是有JobTracker来完成得。这导致了,JobTracker负荷太大不便于管理和扩展而对于Yarn,我们看可以清晰地看到资源管理和任务调度被分为了两个部分:RM和AM。

总体来说,Yarn相当于一套操作系统,用于分配调度整体资源。HDFS既是一种文件格式,又是一种存储的架构。Hdfs在hadoop框架里有存储的担当,相当于计算机硬盘。Hadoop2.x系列比Hadoop1.x系列优越之处就是有了Yarn的结构框架,用来给部署在yarn上的应用,分配资源,管理资源。(任务调度)job / application 调度。

Hadoop 1.x时代中MapReduce什么事都干,而Hadoop2.x中MapReduce的话则是专门处理数据分析,而YARN则做为资源管理器而存在。我用自己的理解对yarn进行解释,并且是相对于hadoop1.x系列讲,Yarn的出现,从而将Mapreduce剥离或者说是解放出来专门用于数据的计算分析,而任务调度,资源管理则yarn完成,这可是Hadoop1.x系列没有的新的思想,也是进一步的优化吧。

作业管理由ApplicationMaster实现,而资源管理由新增的管理系统Yarn完成,由于yarn的通用性,yarn也可以作为其他计算框架的资源管理系统,不仅仅限于MapReduce,yarn也是其他计算框架的管理平台(例如:Spark)

4、  Yarn的架构解析

图 4-1 Yarn的架构图

Yarn的架构(图4-1)将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的服务,用于管理全部资源的ResourceManager以及管理每个应用的ApplicationMaster,ResourceManager用于管理向应用程序分配计算资源,每个ApplicationMaster用于管理应用程序、调度以及协调。 一个应用程序可以是经典的MapReduce架构中的一个单独的Job任务,也可以是这些任务的一个DAG(有向无环图)任务。 ResourceManager及每台机上的NodeManager服务,用于管理那台主机的用户进程,形成计算架构。每个应用程序的 ApplicationMaster实际上是一个框架具体库,并负责从ResourceManager中协调资源及与NodeManager(s)协作执 行并监控任务。

ResourceManager包含两个主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)。

定时调度器(Scheduler):定时调度器负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且它不保证会重启由于应用程序本身或硬件出错而执行失败的应用程序。

应用管理器(ApplicationManager):应用程序管理器负责接收新任务,协调并提供在ApplicationMaster容器失败时的重启功能。

ApplicationMaster:每个应用程序的ApplicationMaster负责从Scheduler申请资源,以及跟踪这些资源的使用情况以及任务进度的监控。

NodeManager:NodeManager是ResourceManager在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler提供这些资源使用报告。

为了更好 的说明Yarn的资源管理,首先来看下Yarn的框架,如图4-2所示:

图 4-2Yarn的架构图

从图4-2可以看到 ,当客户向RM提交 作业时,由AM负责向RM提出资源申请,和向NameManager(NM)提出task执行 。也就是说 在这个过程中,RM负责资源调度,AM 负责任务调度。几点重要说明:RM负责整个集群的资源管理与调度;Nodemanager(NM)负责单个节点的资源管理与调度;NM定时的通过心跳的形 式与RM进行通信,报告节点的健康状态与内存使用情况;AM通过与RM交互获取资源,然后然后通过与NM交互,启动计算任务。
    下面对上面的内容通过内存资源配置进行详细说明:下面对上面的内容通过内存资源配置进行详细说明:RM的内存资源配置,主要是通过下面的两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置好): 
yarn.scheduler.minimum-allocation-mb 
yarn.scheduler.maximum-allocation-mb
    说明:单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值,从这个角度看,最小值有点想操作系统中的页。最小 值还有另外一种用途,计算一个节点的最大Container数目注:这两个值一经设定不能动态改变(此处所说的动态改变是指应用运行时)。
    NM的内存资源配置,主要是通过下面两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置) :yarn.nodemanager.resource.memory-mb
yarn.nodemanager.vmem-pmem-ratio
    说明:每个节点可用的最大内存,RM中的两个值不应该超过此值。此数值可以用于计算container最大数目,即:用此值除以RM中的最小容器内存。虚 拟内存率,是占task所用内存的百分比,默认值为2.1倍;注意:第一个参数是不可修改的,一旦设置,整个运行过程中不可动态修改,且该值的默认大小是 8G,即使计算机内存不足8G也会按着8G内存来使用。
    AM内存配置相关参数,此处以MapReduce为例进行说明(这两个值是AM特性,应在mapred-site.xml中配置),如下:
mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
    说明:这两个参数指定用于MapReduce的两个任务(Map and Reduce task)的内存大小,其值应该在RM中的最大最小container之间。如果没有配置则通过如下简单公式获得:max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))一般的reduce应该是map的2倍。注:这两个值可以在应用启动时通过参数改变。AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以通过,如下选项配置:
mapreduce.map.java.opts
mapreduce.reduce.java.opts
    说明:这两个参主要是为需要运行JVM程序(java、Scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。
    我们对上面的内容进行下总结,当配置Yarn内存的时候主要是配置如下三个方面:每个Map和Reduce可用物理内存限制;对于每个任务的JVM对大小的限制;虚拟内存的限制。

在上Yarn的框架管理中,无论是AM从RM申请资源,还是NM管理自己所在节点的资源,都是通过container进行的。Container是Yarn的资源抽象,此处的资源包括内存和cup等。下面对container,进行比较详细的介绍。为了是大家对container有个比较形象的认识,首先看图4-3:

图 4-3 Yarn的container图

从图4-3中我们可以看到,首先AM通过请求包ResourceRequest从RM申请资源,当获取到资源后,AM对其进行封装,封装成ContainerLaunchContext对象,通过这个对象,AM与NM进行通讯,以便启动该任务。

最后对container进行如下总结:container是Yarn的资源抽象,封装了节点上的一些资源,主要是CPU与内存;container是AM向NM申请的,其运行是由AM向资源所在NM发起的,并最终运行的。有两类container:一类是AM运行需要的container;另一类是AP为执行任务向RM申请的。

5、本章小结

本章主要介绍Yarn的模块,这个模块是Hadoop2.x当中最重要的模块,是负责资源调度的模块,被称为云的操作系统,其重要性可想而而知。本章通过对Yarn工作的过程对Yarn进行了许多解析,我们应该注意到里面的两个成员ResourceManager和DataManager,他们之间的主从配合,给Yarn架构提供保障。这也是Hadoop1.x系列里所没有的。

hadoop2.x下Yarn详解相关推荐

  1. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  2. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  3. Linux中/proc目录下文件详解 /proc/devices文件 /proc/modules文件

    http://blog.chinaunix.net/uid-10449864-id-2956854.html 原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu,内存等相关的信息, ...

  4. linux在当前目录下创建pic目录,Linux中/proc目录下文件详解

    文章转自: Linux中/proc目录下文件详解(一) ------------------------------------------------------------------------ ...

  5. Linux中/proc目录下文件详解(zt)

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  6. python 下划线变量_Python中的下划线详解

    这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...

  7. 【Markdown基础教程】分割线,删除线与下划线详解

    新的一篇又开始了 在这篇文章中,我会对Markdown分割线,删除线,下划线做一个详细介绍 我们进行之前,先了解这些都是什么 分割线: 删除线: 我被删除啦 下划线: 看我身下的横线 其实分割线不应该 ...

  8. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储 ...

  9. Linux下命令详解(-)

    linux 下的命令详解 今天的是linux下tar包的打包和解包  打包并压缩  解包解压缩的命令详解 要是有不对的地方请各位指正,和有补充的请留言 在此表示感谢 By:黑风 打包 (把多个文件放在 ...

最新文章

  1. 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.47. Gawk-4.1.1...
  2. 回复 寒枫天伤 - PSP 的问题
  3. Bootstrap3.0学习第十轮(下拉菜单、按钮组、按钮式下拉菜单)
  4. 消防管件做的机器人图片_消防管件组装成机器人 PM值临界时会报警并自动喷淋...
  5. 在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序
  6. iOS - UITextField
  7. linux中输入ls出现蓝色的点,linux上ls的蓝色太深,怎么处理
  8. c#中params关键字应用
  9. 高速软件加密锁技术的发展历程
  10. 同济大学 线性代数 第六版 pdf_线性代数同济大学第六版第一章课后习题答案
  11. 014:针对mdk中STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决(转)
  12. 【关于Java方法的学习】
  13. 【极简教程】Linux Shell 脚本编程
  14. QT QDateTime获取当前时间且分出年月日时分秒
  15. Eclipse官方汉化方法
  16. Python 爬虫 中国行政区划信息爬取 (初学者)
  17. c# .net接口协定Contract
  18. 杰理之flash常见问题【篇】
  19. 终极!绝无仅有,史上最强python爬虫资料分享!
  20. 使用python开发 百度网盘接口

热门文章

  1. windows平台下获取电脑温度数据
  2. 学习-Java类和对象之参数传值机制之求球面积
  3. microsoft官方下载office 2019
  4. iOS模拟器中导入视频,获取相册视频,视频缩略图
  5. 葫芦娃六娃_葫芦娃手游六娃厉害吗 葫芦娃手游六娃技能详解
  6. 马斯克:7月份特斯拉完全自动驾驶选项涨价1000美元
  7. buuoj Pwn writeup 206-210
  8. hosts文件修改,重启生效
  9. Mac中磁盘没有正常推出的解决方案
  10. 沉睡者IT - 贡献者和律师的Web3指南:充分去中心化