【Free Style】Hadoop-Yarn之Resource Manager源码分析(一)

举报
pappy 发表于 2017/11/02 17:39:33 2017/11/02
【摘要】 1 简介1.1 背景介绍带有MapReduce的Apache Hadoop是分布式数据处理的骨干力量,借助其独特的横向扩展物理集群架构和由 Google 最初开发的精细处理框架,Hadoop 在大数据处理的全新领域迎来了爆炸式增长。此外,Hadoop 还开发了一个丰富多样的应用程序生态系统,包括 Apache Pig(一种强大的脚本语言)和 Apache Hive(一个具有类似

1      简介

1.1      背景介绍

带有MapReduceApache Hadoop是分布式数据处理的骨干力量,借助其独特的横向扩展物理集群架构和由 Google 最初开发的精细处理框架,Hadoop 在大数据处理的全新领域迎来了爆炸式增长。此外,Hadoop 还开发了一个丰富多样的应用程序生态系统,包括 Apache Pig(一种强大的脚本语言)和 Apache Hive(一个具有类似 SQL 界面的数据仓库解决方案)等。但是,MRv1在内存消耗,线程模型和扩展性/可靠性/性能方面暴露出来了一些问题:

1)可靠性(Reliability):JobTracker不可靠

2)可用性(Availability): JobTracker可用性有问题

3 扩展性(Scalibility)拥有10000个节点和200000个核的集群

4 向后兼容性(Backward Compatibility):确保用户的MapReduce作业可无需修改即可运行

5  演化(Evolution):让用户能够控制软件栈的升级,尤其是与HiveHBase等的兼容。

6 可预测的延迟:这是用户非常关心的。小作业应该尽可能快得被调度,而当前基于TaskTracker->JobTracker pingheartbeat)的通信方式代价和延迟过大,比较好的方式是JobTracker->TaskTracker ping, 这样JobTracker可以主动扫描有作业运行的TaskTracker(调用RPC)。

7)集群资源利用率。 Map slotreduce slot不能共享,且reduce 依赖于map结果,造成reduce taskshuffle阶段资源利用率很低,出现“slot hoarding”现象。

 

针对MRv1的问题,提出了新的资源管理及作业调度方案:YarnYet Another Resource Negotiator)。Yarn被集成于Hadoop中,为Haoop提供数据计算框架Hadoop最新版本为2.7.2。其官方网站http://hadoop.apache.org/

 

1.2      名词介绍

1 Hadoop 1.0        

第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成,对应Hadoop版本为Hadoop 1.x0.21.X0.22.x

2  Hadoop 2.0

第二代Hadoop,为克服Hadoop 1.0HDFSMapReduce存在的各种问题而提出的。针对Hadoop 1.0中的单NameNode制约HDFS的扩展性问题,提出了HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展;针对Hadoop 1.0中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN(Yet Another Resource Negotiator),它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManagerApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序。对应Hadoop版本为Hadoop 0.23.x2.x

3 MapReduce 1.0或者MRv1MapReduce version 1

第一代MapReduce计算框架,它由两部分组成:编程模型(programming model)和运行时环境(runtime environment)。它的基本编程模型是将问题抽象成MapReduce两个阶段,其中Map阶段将输入数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录,而Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上。它的运行时环境由两类服务组成:JobTrackerTaskTracker,其中,JobTracker负责资源管理和所有作业的控制,而TaskTracker负责接收来自JobTracker的命令并执行它。

4MRv2MapReduce version 2

MapReduce 2.0或者MRv2具有与MRv1相同的编程模型,唯一不同的是运行时环境。MRv2是在MRv1基础上经加工之后,运行于资源管理框架YARN之上的MRv1,它不再由JobTrackerTaskTracker组成,而是变为一个作业控制进程ApplicationMaster,且ApplicationMaster仅负责一个作业的管理,至于资源的管理,则由YARN完成。

简而言之,MRv1是一个独立的离线计算框架,而MRv2则是运行于YARN之上的MRv1

5 MapReduce 2.0或者YARN或者NextGen MapReduce

Hadoop 2.0中的资源管理框架,它是一个框架管理器,为各种框架进行资源分配和提供运行时环境。而MRv2则是运行在YARN之上的第一个计算框架,其他计算框架,比如SparkStorm等,都正在往YARN上移植。YARN类似于几年前的资源管理系统mesos和更早的Torque

6 HDFS Federation

Hadoop 2.0中对HDFS进行了改进,使NameNode可以横向扩展成多个,其中,每个NameNode分管一部分目录,这不仅增强了HDFS的扩展性,也使HDFS具备了隔离性。

2      架构介绍

2.1      整体架构

Mesos类似,Yarn是一个典型的双层调度器。MRv2最基本的设计思想是将JobTracker的两个主要功能,即资源管理和作业调度/监控分成两个独立的进程。在该解决方案中包含两个组件:全局的ResourceManagerRM)和与每个应用相关的ApplicationMasterAM)。这里的应用指一个单独的MapReduce作业或者DAG作业。RM和与NodeManagerNM,每个节点一个)共同组成整个数据计算框架。

1、  ResourceManager :负责计算机资源的全局管理和分配。主要包括:1)一个资源调度器,负责分配资源给各个正在运行的应用程序;2)应用程序管理器,负责整个系统中应用程序的启动和关闭、访问权限、资源使用期限等。

a)         Scheduler:负责为各类运行的APP分配资源,并且满足各类性能,队列等约束。Scheduler并不做任何应用状态的监控和跟踪,也不提供任何重启失败任务的保证。当前Scheduler支持策略的可插拔,当前支持CapacityScheduler以及FairScheduler

b)        ApplicationManager负责管理整个系统中所有应用程序,包括应用程序提交、向任务调度器申请资源启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它。

2、  ApplicationMasterAM:管理应用的调度和协调。负责:1)与RM的资源调度器协商以获取资源;2)将得到的资源分配给内部任务;3)与NoodeManager通信以启动、停止任务;4)监控所有任务状态,并在任务运行失败时重新运行任务

3、  NodeManager:负责每个节点上资源和任务的管理,主要负责1)定时向RM汇报本节点上的资源使用情况和各个Container的运行状态;2)接受并处理来自AMContainer的启动/停止请求。

4、  Container:容器是动态资源的分配单位,负责封装某个节点上的资源,当AMRM申请资源时,RMAM返回的资源以Container表示。

 

2.2      Yarn工作流程

1)提交应用及其使用到的资源

    用户向YARNRM提交应用程序,其中包括AM程序、启动AM的命令、用户程序等。客户端将应用程序所需的文件资源(外部字典、JAR包、二进制文件等)提交到HDFS.

 2)启动AM

      RM为该应用程序分配第一个Container,并与对应的NM通信,要求它在这个Container中启动应用程序的AM

3)注册应用

   AM首先向RM注册,表明自己启动成功,这样用户可以直接通过RM查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7

4)为任务申请资源

   AM采用轮询的方式通过RPC协议向RM申请和领取资源。

5)与NM通信启动各个任务

    一旦ApplicationMaster申请到资源后,ApplicationMaster就会将启动命令交给NodeManager,要求它启动任务。启动命令里包含了一些信息使得Container可以与Application Master进行通信。

6NM启动任务

     NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务(Container)。如果该应用程序第一次在给节点上启动任务,则NM首先从HDFS上下载文件缓存到本地,然后启动该任务。

7)任务状态汇报

     Container内执行用户提交的代码,各个Container通过RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。

8)运行完毕

     应用程序运行完成后,AMRM注销并关闭自己。

2.3      整体代码结构

核心代码组件目录包括以下几个部分:

hadoop-yarn-api – Yarn跨平台外部接口,同时也包括了RMAMNM之间交互的接口;

hadoop-yarn-applicationYarn AM的编程实例。

hadoop-yarn-clientYarn 客户端实现,提交任务的发起端

hadoop-yarn-common:基础组件,包括ipcprotobufevent dispatcherstate machine等实现,可以被clientserver使用。

hadoop-yarn-register目前不确定是什么用处,待确定

hadoop-yarn-server:对hadoop-yarn-api的实现,其中包含了对NMRM的实现,以及NMRM之间共享API的实现

因博客文章字数受限,下一篇我们继续探讨~~~

【Free Style】Hadoop-Yarn之Resource Manager源码分析(二)

https://portal.huaweicloud.cn/blogs/4abcd5ebc04811e7b8317ca23e93a891



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。