文章包含内容:网络
1. YARN产生背景架构
2. YARN基本架构及原理app
-----------------------------------------------------------框架
1. YARN产生背景运维
Hadoop1.x中的MapReduce构成图oop
在Hadoop1.0中,MapReduce主要是由JobTracker和TaskTracker构成。MapReduce采用了Master/Slave架构,表现形式为一个JobTracker带多个TaskTracker,做为Master的JobTracker,它是整个集群的惟一的全局管理者,它也是一个服务进程,启动以后,它会一直监听并接收来自各个TaskTracker发送的“心跳”信息,资源使用状况和任务运行状况。大数据
JobTracker主要有两大功能:首先是做业布置,在Hadoop中,每一个应用程序被表示为一个做业,每一个做业又被分红多个任务,JobTracker的做业控制模块负责做业的分解和状态的监控。监控是对TaskTracker的状态进行监控,做业状态、任务状态进行监控,其做用是容错和对任务调度提供依据。第二个JobTracker的主要功能是资源管理,JobTracker在Hadoop1中身兼多职,这也为它后面,包括它的扩展性和单点故障埋下了隐患。spa
做为Slave的TaskTracker有两个做用:第一个是汇报心跳,TaskTracker会周期性的将全部节点上各类信息经过心跳机制汇报给JobTracker,包括节点的健康情况、资源使用状况、任务执行进度、任务进行状态等。第二个是执行命令,执行JobTracker给TaskTracker下达的各类命令,包括启动任务、提交任务、杀死任务、杀死做业和从新初始化。设计
Hadoop1.x中MapReduce弊端blog
扩展性差、可靠性差、资源利用率低、没法支持多种计算框架
扩展性差
JobTracker兼备了资源管理和做业控制两大功能,这成为系统的一个最大瓶颈,它严重制约了Hadoop集群的扩展性。后面为解决这个问题,设置了YARN,YARN只负责资源管理。
可靠性差
由于Hadoop1种MapReduce采用Master/slave结构,所以做为Master的JobTracker一旦发生单点故障,将致使整个集群不可用。
资源利用率低
Hadoop1的MapReduce采用了一种基于槽位(slot)的资源分配模式,槽位是一种粗粒度的资源划分单位,一般一个任务不会用完槽位的固定资源,且其余任务也没法使用这些空闲资源。咱们一般将槽位分为map slot和reduce slot两种,且不容许它们之间共享,经常会致使一种槽位资源紧张,而另外一种槽位资源空闲,这会大大浪费资源。后面也会讲到YARN的资源分配的单位container。
没法支持多种计算框架
MapReduce是一种基于磁盘的离线计算,如今大数据不只仅包括这种离线计算,还包括内存计算、流式计算、迭代式计算,而hadoop1和MapReduce没法支持多种计算框架。在一个平台上集成多种计算框架的优势是:1.资源利用率高,若是每一个框架一个集群,则每每由于应用程序的数量和资源利用率的不均衡,使得在某段时间内,某些框架内的资源紧张,而另一些资源空闲。共享集群模式则经过多种框架共享资源,使集群中的资源能够充分地利用。2.运维成本低。3.数据共享 因为数据量的暴增,跨集群间的数据移动不只花费时间长,且运维成本也会大大增长,共享集群可让多种框架共享数据和硬件资源,这能够减小数据移动带来的成本。
基于上述缺点,Hadoop2提供了一个资源管理器YARN。
2. YARN基本架构及原理
YARN是一种Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。YARN主要是由ResourceManager,NodeManager和application master和相应的container构成的。
YARN的主要组件
ResourceManager
ApplicaitonMaster
NodeManager
Container
YARN的结构图
Resource Manager主要负责这些Node Manager资源统一的管理和调度,当用户提交一个应用程序,须要提交一个用于跟踪管理这个应用程序的Application Master,在Node Manager上Container上产生的一个Application Master,Application Master主要负责向Resource Manager申请资源,并要求NodeManager启动能够占用必定资源任务,Application Master向Resource Manager不断地以轮询的方式索要资源,要到资源之后,它会要求Node Manager在相应的资源上启动它的任务。
Resource Manager是什么?
Resource Manager是一个全局资源管理器,它负责整个系统的资源管理分配,主要由两个组件构成:一个是调度器,一个是应用程序管理器,Resource Scheduler和Application Manager。
Resource Manager的调度器是一个纯的调度器,它不从事任何与应用程序相关的工做,它将系统中的资源分配给各个正在运行中的程序,它不负责监控或者跟踪应用的执行状态,也不负责从新启动因应用程序失败或者硬件故障而产生的失败任务。这些都由应用程序对应的Application Master完成。调度器是一个可插拔的组件,用户能够根据本身的须要设计新的调度器,YARN提供了不少直接可用的调度器。
应用程序管理器,它负责整个系统中全部应用程序,包括应用程序提交,与调度器协商资源已启动Application Master,监控Application Master运行状态,并在失败的时候通知它。而具体的任务,则交给Application Master去管理,至关于一个项目经理。用户提交的每个应用程序都包含一个Application Master,Application Master主要是与Resource Manager协调协商获取资源Application Master将获得的做业分配内部的这些任务Application Master负责与Node Manager通讯以启动中止任务,并监控该应用程序所在,全部任务运行状态,当任务运行失败时,从新为任务申请资源并重启任务。
Node Manager做为YARN的一个slave,它是整个运行的一个执行者,Node Manager是每一个节点上资源和任务管理器,它会定时向Resource Manager汇报本节点的资源使用状况和各个Container(这是一个动态的资源单位)的运行状态,而且Node Manager接收并处理来自Application Master的Container启动和中止等请求。Container资源抽象,它是封装了某个节点的多维度资源,好比封装了内存、CPU、磁盘、网络,当Application Master向Resource Manager申请资源时,Resource Manager为Application Master返回的资源是一个Container,获得资源的任务只能使用该Application Master,Container是根据应用程序需求动态生成的。
流程图
工做原理
首先,Client向YARN中提交一个应用程序,包括Application Master,启动Application Master和用户程序;
而后,ResourceManager会为该应用程序分配一个Container,它首先会跟Node Manager进行通讯,要求它在这个Container中启动应用程序的Application Master;
第三步,Application Master一旦生成之后,它首先会向ResourceManager注册,这样用户能够直接经过ResourceManager查看应用程序的运行状态,而后它将为各个任务申请资源并监控它们的运行状态,直到运行结束,它会以轮询的方式,经过RPC协议向ResouceManager申请和领取资源,一旦Application Master申请到资源后,它会和Node Manager通讯,要求它启动任务;
Node Manager为任务设置好运行环境,以及环境变量、架包还有二进制程序,将任务启动命令写在脚本中,并经过运行该脚本启动任务,各个任务经过RPC协议向Application Master汇报本身的状态和进度,这样会让Application Master随时掌握各个任务的一个运行状态,一旦任务失败,Application Master就会重启该任务,从新申请资源。应用程序运行完成后,Application Master就会向ResourceManager注销并关闭此任务。咱们在应用程序整个运行过程当中能够用RPC向Application Master查询应用程序当前的运行状态,在Web上能够看到整个的做业的运行状态。