在MapReduce1.0中主要由JobTracker和TaskTracker组成,JobTracke负责资源监控和作业调度,TaskTracker是Hadoop集群中运行于各个节点上的服务。负责任务的执行和汇报心跳。
从上图中可以看到JobTracker在整个集群中只有一个,如果JobTracker运行时发生故障或挂掉,则整个集群的作业将无法提交或运行。还有就是节点压力大,因为客户端的所有请求都会经过JobTracker,同时还负责整个集群的作业控制和资源管理。最后就是它仅支持运行MapReduce作业,无法运行Spark、Storm等其它的作业。
综上所述,在Hadoop 1.x 中 的MapReduce 主要有三个缺点:单点故障、节点压力大,只能运行MapReduce作业,所以在Hadoop2.x中产生了一个资源调度框架Yarn来解决Hadoop 1.x中所面临的问题。Hadoop 2.x 后 只要按照Yarn的标准规范开发Application Master,就可以把你的作业提交到Yarn 上运行,Yarn 会进行统一的资源管理及分配,它不仅可以运行MapReduce作业,还可以运行其它各种类型的作业,比如:流式计算框架Storm、内存计算框架Spark等等。
Yarn(Yet Another Resource Negotiator的缩写)是Hadoop集群中的资源管理系统,Hadoop 2.x 对MapReduce进行了彻底的设计重构,它的基本思想是将MapReduce1.x 中的JobTracker拆分成了两个独立的服务一个全局的资源管理器ResourceManager和每个应用程序特有的Application Master。
ResourceManager 负责整个系统的资源管理和分配,Application Master 负责单个应用程序的管理,结合从ResourceManager中获取的资源和NodeManager协同工作来运行和监控任务。
Yarn的架构和NameNode一样,仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,1个ResourceManager对应多个NodeManager构成(一对多)。
ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。
Yarn 主要由如下4部分组成
(1).ResourceManager(RM)
RM 在整个集群中处于工作状态的只有一个,它负责资源的统一管理和调度,主要任务如下
1)处理客户端发起的请求(启动/杀死应用程序)
2)启动/监控ApplicationMaster,AM挂了,RM将会在另外一个节点上启动该AM
3) RM要监控NM
4)整个系统的资源分配和调度
(2).NodeManager(NM)
整个集群中有多个,负责自己节点的资源使用和管理,主要任务如下
1)定时向RM汇报本节点上的资源使用情况和各个Container的运行情况
2)接收和处理来自RM的Container启动和停止的各种命令
3)处理来自AM的命令
4)本节点上的资源管理和任务管理
(3).ApplicationMaster(AM)
每个应用程序一个,负责应用程序的管理,主要任务如下
1)数据切分
2)为应用程序向RM申请资源(Container),分配内部任务
3)与NM通信以启动/停止任务,Task都是运行在Container中的
4)Task的容错
(4).Container
对任务环境的封装,如内存、CPU、磁盘、网络等与任务相关的信息,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。
上图为Yarn 执行流程图,当用户向Yarn 提交一个应用程序后,Yarn将分两个阶段运行该程序:第一个阶段为启动ApplicationMaster,由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行成功,具体分为如下几个步骤:
(1).用户向YARN提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等
(2).ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster
(3).ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7
(4).一旦ApplicationMaster申请到资源后,则与对应的NodeManager通信,要求其启动任务
(5).应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己
yarn 的容错性主要有如下3个方面:
(1).ResourceManager 容错
存在单点故障,基于zookeeper实现hadoop ha 集群高可用
(2).NodeManager 容错
失败后,RM将失败的任务会告诉AM,让AM来决定是否处理失败的任务
(3).Application Master 容错
失败后,由RM负责重启,RMAPPMaster会保存已经运行完成的Task,重启后无需重新运行
环境搭建(单机)
mapred-site.xml
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
启动 Yarn
$ start-yarn.sh
输入jps命令如果可以看到如下两个进程表示成功
NodeManager
ResourceManager
Hadoop 高可用集群请查看博客:
http://blog.csdn.net/HG_Harvey/article/details/76269561