Apache YARN是Hadoop的集群资源管理系统.
YARN具有足够的通用性,不仅可以改善MapReduce的实现,还可以支持其他的分布式计算模式.
YARN提供请求和使用集群资源的API,但很少直接用于用户代码,用户代码中用的是分布式计算框架提供的更高层的API.
一些分布式计算框架作为YARN应用运行在集群计算层和集群存储层.
4.1剖析YARN应用运行机制
YARN通过两类长期运行的守护进程提供自己的核心服务:管理集群上资源使用的资源管理器,运行在集群中所有节点上且能够启动和监视容器的节点管理器.
容器用于执行特定应用程序的进程,每个容器都有资源限制.
在YANRN上运行一个应用:首先,用户端联系资源管理器,要求它运行一个application master进程.然后资源管理器找到一个能够在容器中启动applicathon master的节点管理器.
4.1.1 资源请求
YARN有一个灵活的资源请求模型.当请求多个容器时,可以指定多个容器需要的计算机资源数量,还可以指定对容器的本地限制要求.
本地化对于确保分布式数据处理算法高效使用集群贷款非常重要.本地限制可以用于申请位于指定节点或机架,或集群中任意位置(机架外)的容器.
通常情况下,当启动一个容器用于处理HDFS数据块时,应用将会向这样的节点申请容器:存储该数据块三个复本的节点,或是存储这些复本的机架中的一个节点.如果都申请失败,则申请集群中的任意节点.
YARN应用可以在运行中的任意时刻提出资源申请.
Spark采用在最开始提出所有的请求的方式,在集群上启动固定数量的执行器.
MapRaduce在最开始时申请map任务容器,reduce任务容器的启用则放在后期.同样,如果任何任务出现失败,将会另外申请容器以重新运行失败的任务.
4.1.2应用生命期
应用到用户运行的作业之间的映射关系分类:
①最简单的模型是一个用户作业对应一个应用(MapReduce采取的方式)
②作业的每个工作流或每个用户对话(可能并无关联性)对应一个应用.容器可以在作业之间重用,并且有可能缓存作业之间的中间数据(Spark采取的方式)
③多个用户共享一个长期运行的应用.这种应用通常是作为一种协调者的角色在运行.
4.1.3 构建YARN应用
4.2 YARN与MapReduce 1 相比
MapReduce1中,有两类守护进程控制着作业执行过程:一个jobtracker及一个或多个tasktraker.
jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统上的作业.tasktracker在运行任务的同时将运行进度报告发送给jobtracker,jobtracker由此记录每项任务作业的整体进度情况.
MapReduce1 中,jobtracker同时负责作业调度和任务进度监视.在YARN中这些职责分别由资源管理器和application master负担.jobtracker也负责存储已完成作业的作业历史,在YARN中,则是由时间轴服务器存储应用历史.
相比MapReduce1,使用YARN的好处:
高可扩展性
高可用性
高利用率
多租户
4.3 YARN中的调度
YARN调度器:根据既定策略为应用分配资源
4.3.1 调度选项
YARN有三种调度器可用:FIFO调度器,容量调度器,公平调度器.
FIFO调度器:
FIFO调度器将应用放置在一个队列中,然后按照提交的顺序进行应用.首先为队列中的第一个应用的请求分配资源,第一个应用的请求被满足后在依次为队列中下一个应用服务.
优点:简单易懂,不需要任何配置,但不适合共享集群.
容量调度器:
使用容量调度器时,一个独立的专门队列保证小作业一提交就可以启动.但是大作业执行的时间要更长.
公平调度器:
使用公平调度器时,不需要预留一定量的资源,因为调度器会在所有运行的作业之间动态平衡资源.
4.3.2容器调度器配置
容器调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分.
每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源.
队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源.
在每个队列内,使用FIFO调度策略对应用进行调度.
单个作业使用的资源不会超过其队列容量.
"d性队列":队列中有多个资源,并且队列资源不够用时,如果仍有可用的空闲资源,呢吗容量调度器可能将空余的资源分配给队列中的作业,哪怕这会超出队列容量.
为队列设置一个最大容量限制,可以阻止队列过多侵占其他队列的容量.(但会牺牲队列d性)
队列放置:将应用放置在哪个队列,取决于应用本身.如果不指定队列,那么应用会被放在一个名为"default"的默认队列中.
4.3.3公平调度器配置
公平调度器旨在为所有运行的应用公平分配资源.
用户队列间的公平共享:
①启用公平调度器
②队列配置
③队列放置
④抢占
4.3.5延迟调度
所有YARN调度器都试图以本地请求为重.
YARN中的每个节点管理器周期性的向资源管理器发送心跳请求.心跳中携带了节点管理器中正在运行的容器,新容器可用资源等信息,对于一个计划运行一个容器的应用而言,每个心跳就是一个潜在的调度机会.
通过使用延迟调度,调度器等待设定的最大数目的调度机会发生,然后放松本地性限制并接收下一个调度机会.
容量调度器可以配置延迟调度.
公平调度器使用调度机会的数量来决定延迟时间,使用集群规模的比例来表示这个值.
4.3.6主导资源公平性
YARN中调度器解决多种资源需要调度的复杂情况时,会观察每个用户的主导资源,并将其作为对集群资源使用的一个度量.这个方法称为"主导资源公平性".
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)