yarn

网友投稿 539 2022-05-29

MapReduce作为一个面向海量数据分布式处理的计算模型、框架和平台,具备以下三个特点:

1、易于编程:程序员仅需描述Map阶段和Reduce阶段要如何解析、处理数据,具体怎么读取数据并对处理结果进行排序、分区、组合、合并等等,都可以交由系统的执行框架处理。

2、良好的扩展性:可通过添加节点以扩展集群运算能力。

3、高容错性:在程序运行过程中,当某些节点发生故障时,通过计算迁移或数据迁移等策略在其他节点继续执行受影响的任务,提高集群的可用性与容错性。

那么问题来了,MapReduce到底是如何提交任务到集群执行的呢?集群资源如何获取?任务如何分配?由谁监控执行?

这一连串的问题我们将在这篇文章中为大家解决。

其中MapReduce Program是编辑好的应用程序,由客户端进程JobClient提交给集群中的老大JobTracker。

JobTracker负责集群资源管理和任务调度,它会解析应用程序,然后调动各个小弟TaskTracker分工合作,为应用程序提供运行资源并分布式实施数据处理作业。在小弟干活的过程中,老大负责监控和故障处理。

1、程序员编写好MapReduce Program作业,也就是JAVA程序,然后由客户端进行提交;

2、客户端JobClient向JobTracker申请一个作业ID,加入集群任务列表中;

3、客户端JobClient把作业源代码以及相关的依赖文件存储到HDFS的系统指定目录下;

4、客户端JobClient正式向JobTracker提交作业;

5、JobTracker初始化作业,比如计算资源需求等;

6、JobTracker通过HDFS client向NameNode(管理文件系统元数据的角色,它知道每个文件的分布情况)询问程序需要处理的输入文件分布在哪些节点,并得到这些索引;

7、JobTracker通过和TaskTracker每分钟一次的心跳联系来获知哪些节点可以运行任务(作业将拆分成许多任务给各个小弟执行,集群中每个数据节点都部署一个小弟角色),比如死机或者没有剩余资源的节点就不再执行新任务;

8、JobTracker将任务分配给上一步中的TaskTracker,这些TaskTracker通过访问HDFS来获取任务代码;

9、执行任务的TaskTracker在本节点上启动虚拟机(JVM)来执行任务;

10、在各个JVM中执行任务,该过程受JobTracker监视。如果任务运行失败则由JobTracker通知相应的TaskTracker重启任务,直到全部Map任务和Reduce任务都运行完成。

这个过程看似妥当,其实有个致命的问题:集群老大JobTracter工作量太大。

老大平时需要管理众多小弟不说,当接收到任务执行申请时既要充当整个集群的资源调度者、任务分发者,又要负责各个任务的状态监控以及重启失败任务,工作相当繁忙。

在MapReduce V1中JobTracter只部署在一个节点上,没有备用或者分担工作的进程,所以整个集群存在性能瓶颈和单点故障问题,扩展性也受到受限。

另外,该机制不支持非MapReduce类型的任务提交集群运行,在大数据处理环境中,这也是极不友好的。

正是在这样的背景下催生了Yarn——Hadoop2.0的资源管理系统。Yarn是一个通用的资源管理系统,可为上层应用(包括且不限于MapReduce)提供统一的资源管理和调度,它的出现解决了以上所有的问题。

,Yarn主要包括Resource Manager、Node Manager和Application Master(即App Mstr)三个部分。

Resource Manager(简称RM)即集群老大,是一个全局的资源管理器,负责集群资源统一管理调度和应用程序管理。它包括两个组成部分:Resource Scheduler(资源调度器)和Applications Manager(应用程序管理器)。

资源调度器Resource Scheduler(简称RS)负责将集群中的资源分配给各个应用程序。资源用一个抽象概念Container表示,它封装了节点上的多维度资源,如内存、CPU、磁盘、网络等(目前只实现内存、CPU);

应用程序管理器Applications Manager(简称ASM)负责管理整个系统中的所有应用程序。主要负责接收来自Client的应用程序提交申请,与资源调度器Resource Scheduler协商资源情况,启动并监控AppMaster(下文有解释)运行,在AppMaster运行失败时重启它。

Node Manager(简称NM)即集群小弟,每个数据节点都部署有该角色,用以管理本节点资源(CPU、内存)。一方面它会定期向老大汇报本节点的资源使用情况和各个Container的运行状态;另一方面,它接收并处理来自AppMaster的Container启动/停止等各种请求。

Application Master(简称AppMaster、App Mstr、AM)依赖于各种计算框架的实现(例如MR AppMaster),负责一个Job生命周期内的所有管理工作,相当于老大麾下的项目负责人。

Yarn具体工作流程如下

步骤1:Yarn的客户端Client向RM中的ASM申请Job ID,RM审核该申请的合法性,审核通过后创建一个Job ID返回给客户端;Client把作业源代码以及相关的依赖文件存储到HDFS的系统指定目录下;Client正式向ASM提交作业, 其中包括AM程序、启动AM的命令以及用户程序等。

yarn

步骤2:ASM接收客户端的作业请求后为该作业分配第一个Container。并由对应的Node Manager在这个Container中启动AM程序,用来管理当前的Job。

步骤3:AM启动后向ASM注册,ASM接收AM注册信息,并将集群资源信息、作业源代码的位置信息等反馈给AM。

步骤4:AM从HDFS获取作业程序和相关的依赖文件,了解任务详细情况,确定执行作业需要多少资源,并向RS发出资源申请(该步骤可能无法一次性完成整个作业的资源申请,允许多次申请)。RM根据集群资源情况为AM分配资源,并将资源位置和数量信息发给AM。

步骤5:AM申请到资源后,便与对应的Node Manager通信,要求它拿出Container来启动JVM。

步骤6:Node Manager为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等),将进程启动命令写到一个脚本中,并通过运行该脚本启动JVM。

步骤7:各个JVM启动后首先向AM注册,AM为其分配任务。JVM访问HDFS获取具体任务程序并执行;任务运行过程中,AM可以通过NM询问各个任务的运行状态和进度,从而可以在任务运行失败时对其进行重启;客户端Client可随时向AM查询作业的运行状态和进度。

步骤8:当前Job中的全部任务运行完成后,相应的Container也被回收或应用到其他计算任务中。AM向ASM汇报作业执行结束,ASM注销AM,整个作业执行完成。

在以上的资源调度和任务分配过程中可以看出Yarn的工作机制相比MapReduce V1聪明了很多:

1、老大在管理各个Job方面的压力全部下放给了各个AppMaster,完美地解决了单点性能瓶颈问题。

2、在Yarn中,Resource Manager支持主备模式部署。也就是可以在集群中的两个节点上都部署该角色,同一时刻只有一个在工作,当正在工作的RM故障时,立马由另一个来接替工作,完美地解决了单点故障问题。

3、Yarn除了可以支持MapReduce的作业,还可以支持其他计算框架,如Spark、Storm等。

好啦,今天的分享到这里先告一段落,大家都学会了吗?

分布式 Hadoop Yarn

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在docker中用Tomcat运行web项目
下一篇:HDFS的高级特性
相关文章