Hadoop1.0 VS Hadoop 2.0 Yarn以及Yarn的容错能力

Yarn

  Yarn作为Hadoop 2.0中最重要的一个角色,其实就是相当于一个分布式的操作系统,主要是把Hadoop1.0中JobTracker的功能的下放。在Hadoop体系重要性可以由下图可知,它可以实现资源整合、让系统资源得到最大化利用,同一套硬件集群中可以运行多个任务(MR、Spark、Strom、Flink等等)。也可以从图中可知MapReduce在经历了完全重构后,不再是Hadoop的核心组件,而成为Yarn上的一种应用框架。

在Yarn的架构中包括了三种重要的组件——RM(ResourceManager)、AM(ApplicationMaster)、NM(NodeManager)。都是对Hadoop1.0中JobTracker和TaskTracker的重构升华而形成的。下图就是Yarn的一个架构图,以及各个组件的运行走向。

RM——资源分配,是Yarn中的主,其实是承担了Hadoop1.0中JobTracker中“资源分配”的角色。它主要负责运行各个应用程序以及应用程序(Application)的资源分配【1.0中每个任务称为Job,2.0中称为Application】,将资源分配给每个任务后,任务的状态(包括是否执行成功或者失败)都不会去关心,它只关心资源的分配。RM的本质其实就是一个守护的进程,运行在专有的机器上,因此需要该机器的配置是足够高的。

AM——承担着Hadoop1.0中JobTracker的“任务调度”的功能角色,它的本质其实也是属于Container【一个普通的Container】,但是也会管理其他的Container。是一个任务的主,所谓任务的主是指,当一个任务启动时,会马上启动AM,任务执行完成之后会消失。它的启动是有RM在得到空闲可用的NM后在NM上创建。

NM——承担着Hadoop1.0中TaskTracker的功能角色,具体干活的人。接受RM请求资源,分配Container资源,同时和RM一直通过心跳机制保持通讯。

Container——本质是一个进程,是由NM启动的,作用是真正进行任务的运行。内部其实就是CPU和内存资源。

上面的架构图也比较清晰的说明了Hadoop2.0中任务执行的一个流程:Client提交任务代码,需要由RM帮我们分配资源,这个时候RM会知道哪些NM是有资源可以使用的,这些NM机器上已经帮我们准备好了资源,需要我们自己去取,找到这个NM节点时会去启动一个AM,这个AM和RM进行通信知道哪些节点是可以干活的,返回节点回来后,AM会在相应的节点启动Container,就会在这个Container上运行MapTask或者ReduceTask这些任务。

上面只是一个比较初略的执行流程,更具体的执行流程则如下:

Client向Yarn提交一个Yarn Application(相当于1.0中的Job),提交完成后,RM需要和NM进行通信,是为了分配一个容器从而运行AM。AM启动后,需要对作业进行拆分,一个作业包括了多个Task,这么多Task显然是不能运行在一个节点上,因为处理的数据都是大数据量级别,这些Task需要运行在多个节点上的多个Container。所以此时AM需要向RM申请程序运行的容器,RM返回空闲的NM后,由AM在空闲的NM上创建Container,在这个Container进行任务的运行。AM需要时刻与Container保持心跳,因为任务运行成功、失败,AM必须知道,任务运行完成,AM向RM申请注销该容器,对应的NM资源就会被释放;任务失败后,会再向RM申请可以创建Container的节点,并在新的Container上运行任务【如果一个作业包括了10个任务,前五个执行成功,第六个执行失败,也只会重新执行第六个任务】。

Hadoop 1.0资源管理 VS Hadoop 2.0资源管理 

Hadoop1.0中资源是通过Slot来区分的,但是Slot的资源不是互通的,即Map有Map的Slot,Reduce有Reduce的Slot。这里的Slot可以理解为小区中不同类型的停车位——小轿车停车位、电瓶车车位,当小轿车车位停满时,电瓶车位置是停不下的。由此也可以知道在Hadoop1.0中是对资源进行了严格的限制。另外Slot就是资源的调配单元,Slot决定了CPU和内存的大小。

如果使用Slot经常会造成集群资源利用率偏低或者偏高。例如一个Slot代表2G内存和一个CPU。现在任务一需要1G内存和1个CPU,这时集群资源利用率偏低,任务二需要3G内存,所以需要2个Slot,这时空余了1G内存,从而导致集群利用率又过高。Slot的分配都是按照等量的划分,将资源完全平均化,例如一个节点机器——16个CPU+32G内存,配置了4个Slot,那么此时每个Slot包含了4个CPU+8G内存。

在Hadoop2.0中资源就是Container,Contianer类似于搭建积木,可以自由组装。一个节点上可以配置的Container数量是与核数(cores)、磁盘规模(disks)、总内存大小(totalMemorySize)、最小容量(minimumCapacity)有关的。公式如下

container = min(2*cores,1.8*disks,Total memory size/Minimum capacity)

由于核数、磁盘规模、总内存大小是在最开始就固定好了,所以通过最小容量参数配置(MIN_CAINTAINER_SIZE),来达到控制Container数量,设置有一个原则:内存<4G时设置为256M,4G<内存<8G时设置512M,8<内存<24G时设置为1024M

Yarn的容错

RM挂掉:在新的版本可以基于ZooKeeper实现HA高可用集群,可通过配置进行设置准备RM,主提供服务,备同步主的信息,一旦主挂掉,备立即做切换接替服务。用一话说——主(对外服务)备(数据备份,准备随时登位)切换。

NM挂掉:分为两种情况是否含有AM,如果有AM,则整个任务调配失败。没有的AM,只是存在执行任务的Container,会由AM临时进行调配新的NM进行任务执行,整个任务此时不会挂。

AM挂掉:因为RM上其实有一个RMApplicationMaster是AM的AM,上面已保存完成的Task,它可以重启AM,也无需重新运行已完成的任务。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑白键的约定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值