十五:Yarn和MRV1对比介绍

MRv1存在的主要问题是:在运行时,JobTracker既负责资源管理又负责任务调度,这导致了它的扩展性、资源利用率低等问题。之所以存在这样的问题,是与其最初的设计有关,如下图:

从上图可以看到,MRv1是围绕着MapReduce进行,并没有过多地考虑以后出现的其它数据处理方式 。按着上图的设计思路,我们每开发一种数据处理方式(例如spark),都要重复实现相应的集群资源管理和数据处理。因此,Yarn就很自然的被开发出来了.

Yarn对MRv1的最大改进就是将资源管理与任务调度分离,使得各种数据处理方式能够共享资源管理,如

下图所示:

从上图我们可以看到,Yarn是一种统一资源管理方式,是从MRv1中的JobTracker分离出来的。这样的好处显而易见:资源共享,扩展性好等。

MRv1与Yarn的主要区别:在MRv1中,由JobTracker负责资源管理和作业控制,而Yarn中,JobTracker被分为两部分:ResourceManager(RM)和ApplicationMaster(AM)。如下图所示:

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

Yarn与MRv1的差异对编程的影响:我们知道,MRv1主要由三部分组成:编程模型(API)、数据处理引擎(MapTask和ReduceTask)和运行环境(JobTracker和TaskTracker);Yarn继承了MRv1的编程模型和数据处理,改变的只是运行环境,所以对编程没有什么影响。

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

从上图可以看到 ,当客户向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之间。

-------------------------------------------------------------------------------------------

下面通过一个具体错误实例,进行内存相关说明,错误如下:

Container[pid=41884,containerID=container_1405950053048_0016_01_000284] is running beyond virtual memory limits. Current usage: 314.6 MB of 2.9 GB physical memory used; 8.7 GB of 6.2 GB virtual memory used. Killing container.

配置如下:

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>100000</value>
    </property>
    
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>10000</value>
    </property>
    
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>3000</value>
    </property>
    
   <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>2000</value>
    </property>

通过配置我们看到,容器的最小内存和最大内存分别为:3000m和10000m,而reduce设置的默认值小于2000m,map没有设置,所以两个值均为3000m,也就是log中的“2.9 GB physicalmemory used”。而由于使用了默认虚拟内存率(也就是2.1倍),所以对于Map Task和Reduce Task总的虚拟内存为都为3000*2.1=6.2G。而应用的虚拟内存超过了这个数值,故报错 。解决办法:在启动Yarn是调节虚拟内存率或者应用运行时调节内存大小。

-------------------------------------------------------------------------------------------

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

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

时间: 2024-10-17 01:11:30

十五:Yarn和MRV1对比介绍的相关文章

微软云计算介绍与实践(实践之十五)

-- 接上回,继续动态扩展负载的存储. 26.关闭向导前选中创建卷选项,然后点击关闭. 27.随后会打开新建卷向导,点击下一步. 28.查阅设置并点击下一步. 29.确认磁盘容量为 21.9GB 然后点击下一步. 30.选择驱动器盘符 E: 并点击下一步. 31.更改卷标为 Data 然后点击下一步. 32.点击创建. 33.随后将创建一个新卷.点击关闭. 34.在服务器管理器中点击文件与存储服务,然后点击卷.确认新卷已经显示在这里,并且可用空间符合实际情况.如果给新建的卷分配的盘符不是 E:,

微软云计算介绍与实践(实践之二十五)

3.4.创建Runbook自动化活动模板 下面,小张需要在System Center 2012 Service Manager中提供自动化活动模板. 1.在System Center 2012 Service Manager控制台中,选中库工作区,展开导航树中选择运行手册 2.从已经创建的私有云,运行手册窗格中选择Runbook 3.任务窗格中的内容将会更新,现在选择创建Runbook自动化活动模板 4.在创建模板页面上填写以下数据.完成后,选择确定以打开模板编辑器 5.现在你可以改变Runbo

三十五、 rsync工具介绍、rsync常用选项、rsync通过ssh同步

三十五. rsync工具介绍.rsync常用选项.rsync通过ssh同步 一.rsync工具 数据备份,很重要. rsync工具:数据备份的工具.remote sync(远程同步) rsync可以远程同步数据(类似scp),也可以本地同步数据(类似cp). 不同于cp或scp的是,它不会覆盖以前的数据(当数据已存在),而是先判断已存在的数据和新数据的差异,只有数据不同时才会把不同的部分覆盖. 若没有rsync命令,就yum install -y rsync安装. # rsync -av /et

秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回顾和总结,这篇文章对Windows系统下常用的线程同步互斥机制——关键段.事件.互斥量.信号量进行了总结.有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题.因此本文将对事件和信号量作个试验,看看事件和信号量能否处理“遗弃”问题. 一.

linux杂谈(十五):ftp的企业应用级的配置(二)

上篇最后我们讲到了匿名用户家目录的修改,今天来看看匿名用户还可以做什么操作. 1.匿名用户创建和删除目录 其实所有的功能都是上篇所列举的那些参数所控制的,通常大家在记不清的时候都可以查看man手册(man vsftpd.conf),里面列举了所有可以修改的参数.关于匿名用户创建和删除目录的参数如下所示: 把这两个参数设置为YES,匿名用户就可已创建目录了,记得每次修改完配置文件都要重新启动/etc/init.d/vsftpd服务. 发现还是无法创建,怎么回事?其实我们考虑问题一定要全面.虽然配置

NeHe OpenGL教程 第二十五课:变形

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十五课:变形 变形和从文件中加载3D物体: 在这一课中,你将学会如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型. 欢迎来到这激动人心的一课,在这一课里,我们将介绍模型的变形.需要注意的是各个模型必须要有相同的顶点,

2015私人阅读十五佳

2015私人阅读十五佳 2015私人阅读十五佳 统计 私人阅读十五佳 非暴力沟通 沟通的艺术 看入人里看出人外 父母效能训练手册 对伪心理学说不 精益创业 新创企业的成长思维 枪炮病菌与钢铁 人类简史 从动物到上帝 现代世界史 狂热分子 群众运动圣经 独裁者手册 社会主义 经济与社会学的分析 编码 隐匿在计算机软硬件背后的语言 儒家哲学 水浒传注评本 蒋介石与现代中国 统计 2015年一共读完46本,其中五星18本,占比40%:四星17本,占比近40%:三星7本:两星4本.阅读主题以社科.历史.

十五年学不会英语的原因

学习前预热: ---轻松学英语第一步:建立英语思维    为什么大家学英语学得这么累,最后依然对英语糊糊涂涂?原因只有一个--就是我们的学习能力太差了!!我们的老师太笨了!!!    这篇文章主要是给大家讲英语的基本结构, 看了这篇文章,你们会突然就明白,英语怎么会如此简单!!    首先我们来看下面这两张地图(左边是中国地图,右边是英国地图):?    例如,我们中国人一见面第一句话是--"你吃了吗."英国人一见面的第一句话是--"今天天气怎么样? what's the w

python第十五天

python第十五天 今日内容 常用模块的介绍: time,datetime os,sys hashlib,json,pickle,collections time:和时间相关 封装了获取时间戳和字符串形式的时间的一些方法. time.time():获取时间戳 time.gmtime([seconds]):获取格式化时间对象:是九个字段组成的 time.localtime([seconds]):获取格式化时间对象:是九个字段组成的 time.mktime(t):时间对象 -> 时间戳 time.