在MapReduce10中,我们都知道也存在和HDFS一样的单点故障问题,主要是JobTracker既负责资源管理,又负责任务分配。
Yarn中可以添加多种计算框架,Hadoop,Spark,MapReduce,不同的计算框架在处理不同的任务时,资源利用率可能处于互补阶段,有利于提高整个集群的资源利用率。
同时Yarn提供了一种共享集群的模式,随着数据量的暴增,跨集群间的数据移动,需要花费更长的时间,且硬件成本会增大,共享集群模式可以让多种框架共享数据和硬件资源。
整个的调度流程为:
整个集群只有一个,负责集群资源的统一管理和调度
整个集群存在多个,负责单节点资源管理与使用
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
每一个应用有一个,负责应用程序的管理
数据切分,申请资源,任务监控,任务容错
对任务环境的抽象
ResourceManager存在单点故障,基于Zookeeper实现HA,通常任务失败后,RM将失败的任务告诉AM,RM负责任务的重启,AM来决定如何处理失败的任务。RMAppMaster会保存已经运行完成的Task,重启后无需重新运行。
Yarn采用的双层调度框架,RM将资源分配给AM,AM再将资源进一步分配给Task,资源不够时会为TASK预留,直到资源充足。在Hadoop10中我们分配资源通过slot实现,但是在Yarn中,直接分配资源。
资源调度器有:FIFO,Fair scheduler,Capacity scheduler
Yarn支持CPU和内存两种资源隔离,内存时决定生死的资源,CPU时影响快满的资源,内存隔离采用的是基于线程监控和基于Cgroup的方案。
Tez俗称DAG计算,多个计算作业之间存在依赖关系,并形成一个依赖关系的有向图。
Tez是运行在Yarn上的DAG,动态的生成计算的关系流。
如上图左所示的Top K问题,第一个Mapreduce实现wordcount的功能,第二个Mapreduce只用使用Reduce实现排序的问题,但是在Mapreduce中必须创建两个MapReduce任务,但是在Tez优化后,可以直接再第一个reduce后,不进行输出,直接输出到第二个reduce中,优化了Mapreduce
上图中右为一个HiveQL实现的MapReduce,mapreduce为其创建了4个mapreduce任务,使用Tez可以只使用一个Mapreduce任务。
Tez on Yarn和,mapreduce on Yarn上的作业的流程基本一样。
产生一个Mapreduce任务就提交,影响任务的效率,Tez的优化策略是创建一个ApplicationMaster的缓存池,作业提交到AMppplserver中,预先启动若干ApplicationMaster形成AM缓冲池。
同时ApplicationMaster启动的时候也可以预先启动几个container,做为容器的缓冲池。
此外ApplicationMaster运行完成后,不会马上注销其下的container,而是将其预先分配给正要运行的任务。
Tez的好处就是避免产生较多的Mapreduce任务,产生不必要的网络和磁盘IO
Strom是实时处理永不停止的任务,像流水一样不断的处理任务。
Strom非常类似与MapReduce10的架构,如上图所示。
但是其任务的调度的流程与Mapreduce的不一样。
主要的区别是Strom client可以直接 *** 作 Strom ApplicationMaster
spark克服了MapReduce在迭代式计算和交互式计算方面的不足。
spark中引入了RDD,可以并行计算的数据集合,能够被缓存到能存和硬盘中。
spark on Yarn 和MapReduce on Yarn 基本上类似
MR运行需要进行任务管理和资源管理调度,Yarn只是负责资源管理调度。Mapreduce只是运行在Yarn上的应用。
MapReduce20包括Yarn 和MRMapreduce,所以说Yarn是从MapReudce中独立出来的一个模块。但是现在Yarn已经成为多种计算框架的资源管理器。
MapReduce10是可以直接运行的linux系统上的,因为其自带了JobTracker服务和TaskTracker服务,它们可以自己进行资源管理与任务的分配。
MapReduce20中mapreduce是只有任务管理,所以其必须运行在Yarn上进行资源的调度。
前言:
上节课我们讲了 MR job的提交YARN的工作流程 与 YARN的架构,本次课程详细讲讲YARN,多多总结。
YARN(主从) 资源 + 作业调度管理
YARN:是一种新的 Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
ResourceManager(RM):主要接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。
ApplicationManager(作业):应用程序管理,它是负责系统中所有的job,包括job的提交与调度器协商资源来启动ApplicationMaster(AM)和监控(AM)运行状态,并且失败的时候能够重新启动它,更新分配给一个新的Container容器的进度或者状态,除了资源它不管,它就负责job
Scheduler(调度器):更具容量队列的限制条件将我们系统中的资源分配给正在运用的一个应用程序先进先出调度器 :一个作业运行完了,另一个才能运行
yarn的内置调度器:
1FIFO先进先出,一个的简单调度器,适合低负载集群。(适合任务数量不多的情况下使用)
2Capacity调度器,给不同队列(即用户或用户组)分配一个预期最小容量,在每个队列内部用层次化的FIFO来调度多个应用程序。(适用于有很多小的任务跑,需要占很多队列,不使用队列,会造成资源的浪费)
3Fair公平调度器,针对不同的应用(也可以为用户或用户组),每个应用属于一个队列,主旨是让每个应用分配的资源大体相当。(当然可以设置权重),若是只有一个应用,那集群所有资源都是他的。 适用情况:共享大集群、队列之间有较大差别。(生产使用)
capacity调度器的启用:
在ResourceManager节点上的yarn-sitexml设置
Property===>yarnresourcemanagerschedulerclass
Value=====>orgapachehadoopyarnserverresourcemanagerschedulercapacityCapacityScheduler
capacity调度器的配置:
在目录$HADOOP_HOME/hadoop/etc/hadoop/capacity-schedulerxml
修改完成后,需要执行下面的命令:
$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues 使功能动态生效。
NodeManager:主要是节点上的资源和作业管理器,启动Container运行task计算,上报资源、container情况给RM和任务处理情况给AM,整个集群有多个。
ApplicationMaster: 它是负责我们作业的监控并跟踪应用执行状态来重启失败任务的,主要是单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launchContainer指令,接收NM的task处理状态信息。一个job只有一个主程序。
Container: 是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。
Memory:
yarnnodemanagerresourcememory-mb:6408G=50G (如果内存是64G,Yarn只能用到内存的80%也就是50G)
yarnschedulerminimum-allocation-mb: 1G
yarnschedulermaximum-allocation-mb: 1G 50/1=50(并行度) 数量是多了,并行度大了
一个作业200 MapTask 4轮才能结束,速度快了 作业可能挂了
yarnschedulermaximum-allocation-mb: 16G (生产设16G) 50/16=3(并行度) 数量是少了,并行度小了
一个作业200 MapTask 70轮才能结束,速度慢了 作业时间长 稳定不会挂
工作中一个job可以指定 yarnschedulermaximum-allocation-mb的值,但一般不指定。
若泽大数据实战使用YARN跑一个jar包
先启动Yarn
进入hadoop的bin目录 在hdfs上创建一个新文件夹
创建一个testlog文件
将当前目录中的某个testlog文件复制到hdfs中(注意要确保当前目录中有该文件)
查看hdfs中是否有我们刚复制进去的文件
进入share的上层目录,提交单词统计任务,实验环境下我们的提交差不多在15秒左右
生产环境中,应该是30~50之间,调优可以压到10秒之内
登录网页查看相关信息:>
一、YARN:Hadoop集群中的同一资源调度系统。Hadoop20后引入,主要功能有:负责集群中资源的统一调度,响应客户端的请求。
优缺点
二、YARN核心组件及架构
1 ResourceManger(RM):全局资源管理器,集群中只有一个活跃的RM,具体功能包括:处理客户端的请求;启动监控ApplicationMaster;监控NodeManger;资源的分配和调度。
2ApplicationMaster(AM):每个应用程序(job任务)对应一个AM,负责计算job的资源情况,并向RM申请和任务的调度。具体功能包括:(1)计算job资源使用情况,与RM协商申请job的资源情况;(2)与NodeManger通信启动/停止Container,来执行/终止任务的具体执行;(3)监控任务的运行状态及失败处理。
3NodeManager(NM):节点的资源管理器,每个节点启动一个,一般与DataNode一 一对应。具体功能包括:(1)监控和管理当前节点的资源使用情况;(2)通过心跳向RM汇报自身的资源使用情况;(3)处理RM的请求,分配执行AM的Container;(4):处理AM的请求,启动和停止执行任务的Container。
4Container:资源的抽象,包括一系列描述信息,任务的运行资源(节点、CPU、内存等),任务运行环境,启动命令等。
架构图见 yarn-arch
三、YARN运行流程
2 RM根据内部调度器,选取一个资源空闲的NM,启动一个Container来运行AM。
3AM计算应用程序所需资源,向RM进行资源申请,申请字段包括:
message ResourceRequestProto {
optional PriorityProtopriority = 1; // 资源优先级
optional stringresource_name = 2; // 期望资源所在的host
optional ResourceProtocapability = 3; // 资源量(mem、cpu)
optional int32num_containers = 4; // 满足条件container个数
optional boolrelax_locality = 5 ; //default = true;
}
AM会根据文件的存储地址,分析运行需要的资源等,向RM申请一个期望的资源列表,RM同时考虑各个节点资源使用情况,最终分配一个资源列表。
4 RM返回资源列表,以cotainer结构
message ContainerProto {
optional ContainerIdProtoid = 1; //container id
optional NodeIdProtonodeId = 2; //container(资源)所在节点
optional stringnode_>
一、YARN架构设计
YARN有两个进程:Resource Manager和Node Manager
1ResourceManager(RM): 负责对各NM上的资源进行统一管理和调度。将AM分配空闲的Container运行并监控其运行状态。对AM申请的资源请求分配相应的空闲Container。主要由两个组件构成:调度器和应用程序管理器。
2调度器(Scheduler):调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。 Shceduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。
调度器是可插拔的,例如CapacityScheduler、 FairScheduler。
3应用程序管理器(Applications Manager):应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
4NodeManager (NM): NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container 启动/停止等请求。
5ApplicationMaster (AM):用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。
ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。
MapReduce就是原生支持的一种框架,可以在YARN上运行Mapreduce作业。有很多分布式应用都开发了对应的应用程序框架,用于在YARN上运行任务,例如Spark, Storm等。如果需要,我们也可以自己写一个符合规范的YARN application。
6Container:是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、 CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。
在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。
ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的资源调度) 后, NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。
二、YARN常用命令
yarn application -list
yarn application -kill -applicationId
三、YARN调度器
>
yarn kill 进程。
在yarn节点上执行:
$ yarn application -kill application_Id
如下:
以上就是关于Yarn资源调度过程详细全部的内容,包括:Yarn资源调度过程详细、YARN 生产详解、Hadoop生态圈中的调度组件-YARN等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)