Apache Hadoop Yarn主要组件详解

1.Yarn的产生背景

由Doung cutting 根据Google的三篇论文(GFS,MapReduce,BigTable)研发的Hadoop 1.x版本中mapreduce,不仅负责分布式计算任务,而且内置了一个资源调度系统(JobTracker和TaskTracker)。因此导致mapreduce的压力特别大,而且由于各项缺陷,Yarn的产生势在必行。

2.Hadoop 1.x中的资源调度

Hadoop 1.x中对应mapreduce的版本也是1.x,其内置的资源调度系统也是采用的传统的主从架构,即JobTracker作为master,而TaskTracker作为slave,一主多从,进行资源的调度分配。

1)JobTracker

整个mapreduce计算程序的老大,但是因为只有一个JobTracker,所以存在单点故障(不存在高可用配置)

①负责mapreduce任务的资源调度(分配资源)

②启动mapreduce任务

③监控当前的mapreduce任务的执行进度和状态

这里所谓的分配资源即体育老师给每一个班级分配上体育课的场地

班级 上体育课地点
三年级1班 灯光球场
三年级2班 羽毛球场
三年级3班 篮球场A

而且在这个过程中,这个体育老师是要负责给这三个班上课的(启动maptask任务或者reducetask任务),也就是说这个体育老师上完1班的课还要上2班,3班的体育课。并且在上课的时候,老师是需要检查是否有人中途逃课,大家上课的状态的(监控当前的mapreduce任务的执行进度和状态)。

另外假如三年级4班临时语文老师请假改成了体育课,那么这个体育老师就需要给新加入的4班分配体育课场地,然后给他们上课,并且在上课的时候,老师是需要检查是否有人中途逃课,大家上课的状态。

班级 上体育课地点
三年级1班 灯光球场
三年级2班 羽毛球场
三年级3班 篮球场A
三年级4班 篮球场B

所有这些事情,必须这个体育老师亲力亲为,这个老师很负责,但是对于学生来说(maptask与reducetask),谁上课都一样,只要上完了课就行,对他们没有任何影响。(对于maptask任务或者reducetask任务而言就是只要任务执行完了,其他与我无关)。可是体育老师类似累活什么都没有得到。

2)TaskTracker

这里的TaskTracker 可以比作上面上体育课的场地。这个是体育老师(即JobTracker)分配的。所谓的真正提供资源,即为体育课服务的,上体育课的实际地点(maptask任务与reducetask运行的节点)。

但是很不巧的是,整个学校只有这一个体育老师,那么只要有班级上课,那么这个体育老师就要给他们分配上课场地,并且给他们上课,并管理好他们。(mapreduce 1.x版本的资源调度系统没有高可用方案),就是说一旦这个体育老师生病了,或者请假了(JobTracker宕机了),各班级就没有办法上体育课了(mapreduce程序就无法运行了)。简单点说就是存在单点故障。

①真正的提供资源(JobTracker分配资源,TaskTracker提供资源)

但是taskTracker在进行资源提供的时候,强行将自己的资源分成两部分(mapslot和reduceslot),mapslot用于运行maptask任务,reduceslot用于运行reducetask任务,但是需要注意的是,这两块资源是相互独立的。

简单点说就是,体育老师在给三年级1班上课时,将灯光球场分成两块场地(男生区和女生区),规定男生玩游戏时,不得进入女生区,同样女生玩游戏不得进入男生区。要想玩游戏,各自只能在各自的场地内玩游戏。

这样方式很明显是不合理的,maptask只能使用mapslot中的资源,reducetask只能使用reducetask中的资源。这回造成资源的严重浪费,资源分配不合理。

3)MapReduce 1.x中资源调度存在的缺陷

① Jobtracker存在单点故障 (上体育课只有一个老师,老师请假了没法上体育课)

② JobTracker压力过大 (一个体育老师负责所有班级的分配上课场地,上课和监督)

③ 资源利用不合理 (男生女生只能在各自指定的区域内活动)

④ 局限:只能为mapreduce程序进行资源的调度 (体育老师只能为体育课分配场地,某社团需要场地开展活动,体育老师没有权力分配)

⑤扩展能力有限:不能同时运行很多很多mapreduce任务(不能同时给很多个班级上课),不然JobTracker会累死(一个体育老师同时给全校一百个班级上课试试)

2.Hadoop 2.x 中的资源调度

Hadoop 2.x 中,将应用程序运行的过程进行独立出来了,资源调度过程采用Yarn作为资源调度框架,mapreduce只负责具体的分布式计算任务。即从mapreduce框架中将资源调度系统抽离出来,进行重构产生了Yarn。

2.x版本中,每一个mapreduce应用程序都唯一对应一个MRAPPMaster,即每一个MRAPPMaster负责监控和管理一个应用程序。(相当于现在学校管理升级,新添加了几个体育老师,每个体育老师负责一部分班级的体育课程)

体育系的老师
张老师,李老师,王老师

Yarn的架构:

仍然是主从架构,主节点:ResourceManager,从节点:NodeManger

1) ResourceManager

资源调度的老大,为每一个应用程序进行分配资源(相当于三年级1班要上体育课,便问体育系主任哪个老师给他们上课,然后体育系主任安排张老师给他们上体育课一样)

组成:

ASM(ApplicationsManager):所有程序的应用程序管理者

① 为每一个应用程序(MRAPPMaster)进行资源的分配

② 启动每一个应用程序的MRAPPMaster

③ 监控每一个MRAPPMaster的运行状态和进度

④ 回收MRAPPMaster的资源

Scheduler(调度器):决定每一个应用程序执行的顺序

默认有三种调度器:

① FIFO(First in First out):先进先出,按照程序的提交顺序进行执行的

缺陷:当前面提交的程序有比较大的程序,那么会造成后面提交的程序长时间阻塞

② Fair: 公平调度器,所有的job都可以提交,所有job平分资源。

缺点:没有根据job的实际需求分配资源。

③ Capacity:计算能力调度器,也是默认的调度器,即根据每一个job的需求,自己手动配置资源。

此方案一般是按照资源组划分的。组内多个job之间按照FIFO方式进行调度执行。可以根据job需求配置每组资源配比。

2) NodeManager

为应用程序真正的提供资源的。NodeManager在进行资源提供的时候,是以container为单位进行提供的。

container:逻辑资源容器(抽象资源容器),即范围的划分,他是用来做资源隔离的

封装了一定数量的内存,IO,CPU,网络等资源,没有将资源真正的切分出来。

container是提供资源的最小资源。

每一个maptask或者reducetask都会被分配一个container。在container内部执行的进程即YarnChild进程。

3)MRAPPMaster

① 监控每这个应用程序的状态和运行状态和进度,失败重启

② 帮助maptask与reducetask向ResourceManager申请运行资源

③ 启动maptask和reducetask

④ 资源回收

猜你喜欢

转载自blog.csdn.net/qq_33713328/article/details/88683224