【Free Style】Hadoop-Yarn之Resource Manager源码分析(一)
1 简介
1.1 背景介绍
带有MapReduce的Apache Hadoop是分布式数据处理的骨干力量,借助其独特的横向扩展物理集群架构和由 Google 最初开发的精细处理框架,Hadoop 在大数据处理的全新领域迎来了爆炸式增长。此外,Hadoop 还开发了一个丰富多样的应用程序生态系统,包括 Apache Pig(一种强大的脚本语言)和 Apache Hive(一个具有类似 SQL 界面的数据仓库解决方案)等。但是,MRv1在内存消耗,线程模型和扩展性/可靠性/性能方面暴露出来了一些问题:
(1)可靠性(Reliability):JobTracker不可靠
(2)可用性(Availability): JobTracker可用性有问题
(3) 扩展性(Scalibility)拥有10000个节点和200,000个核的集群
(4) 向后兼容性(Backward Compatibility):确保用户的MapReduce作业可无需修改即可运行
(5) 演化(Evolution):让用户能够控制软件栈的升级,尤其是与Hive,HBase等的兼容。
(6) 可预测的延迟:这是用户非常关心的。小作业应该尽可能快得被调度,而当前基于TaskTracker->JobTracker ping(heartbeat)的通信方式代价和延迟过大,比较好的方式是JobTracker->TaskTracker ping, 这样JobTracker可以主动扫描有作业运行的TaskTracker(调用RPC)。
(7)集群资源利用率。 Map slot和reduce slot不能共享,且reduce 依赖于map结果,造成reduce task在shuffle阶段资源利用率很低,出现“slot hoarding”现象。
针对MRv1的问题,提出了新的资源管理及作业调度方案:Yarn(Yet 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.x和0.21.X,0.22.x。
(2) Hadoop 2.0
第二代Hadoop,为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的。针对Hadoop 1.0中的单NameNode制约HDFS的扩展性问题,提出了HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展;针对Hadoop 1.0中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN(Yet Another Resource Negotiator),它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序。对应Hadoop版本为Hadoop 0.23.x和2.x。
(3) MapReduce 1.0或者MRv1(MapReduce version 1)
第一代MapReduce计算框架,它由两部分组成:编程模型(programming model)和运行时环境(runtime environment)。它的基本编程模型是将问题抽象成Map和Reduce两个阶段,其中Map阶段将输入数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录,而Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上。它的运行时环境由两类服务组成:JobTracker和TaskTracker,其中,JobTracker负责资源管理和所有作业的控制,而TaskTracker负责接收来自JobTracker的命令并执行它。
(4)MRv2(MapReduce version 2)
MapReduce 2.0或者MRv2具有与MRv1相同的编程模型,唯一不同的是运行时环境。MRv2是在MRv1基础上经加工之后,运行于资源管理框架YARN之上的MRv1,它不再由JobTracker和TaskTracker组成,而是变为一个作业控制进程ApplicationMaster,且ApplicationMaster仅负责一个作业的管理,至于资源的管理,则由YARN完成。
简而言之,MRv1是一个独立的离线计算框架,而MRv2则是运行于YARN之上的MRv1。
(5) MapReduce 2.0或者YARN或者NextGen MapReduce
Hadoop 2.0中的资源管理框架,它是一个框架管理器,为各种框架进行资源分配和提供运行时环境。而MRv2则是运行在YARN之上的第一个计算框架,其他计算框架,比如Spark、Storm等,都正在往YARN上移植。YARN类似于几年前的资源管理系统mesos和更早的Torque。
(6) HDFS Federation
Hadoop 2.0中对HDFS进行了改进,使NameNode可以横向扩展成多个,其中,每个NameNode分管一部分目录,这不仅增强了HDFS的扩展性,也使HDFS具备了隔离性。
2 架构介绍
2.1 整体架构
与Mesos类似,Yarn是一个典型的双层调度器。MRv2最基本的设计思想是将JobTracker的两个主要功能,即资源管理和作业调度/监控分成两个独立的进程。在该解决方案中包含两个组件:全局的ResourceManager(RM)和与每个应用相关的ApplicationMaster(AM)。这里的“应用”指一个单独的MapReduce作业或者DAG作业。RM和与NodeManager(NM,每个节点一个)共同组成整个数据计算框架。
1、 ResourceManager :负责计算机资源的全局管理和分配。主要包括:1)一个资源调度器,负责分配资源给各个正在运行的应用程序;2)应用程序管理器,负责整个系统中应用程序的启动和关闭、访问权限、资源使用期限等。
a) Scheduler:负责为各类运行的APP分配资源,并且满足各类性能,队列等约束。Scheduler并不做任何应用状态的监控和跟踪,也不提供任何重启失败任务的保证。当前Scheduler支持策略的可插拔,当前支持CapacityScheduler以及FairScheduler。
b) ApplicationManager:负责管理整个系统中所有应用程序,包括应用程序提交、向任务调度器申请资源启动ApplicationMaster、监控ApplicationMaster运行状态并在失败时重新启动它。
2、 ApplicationMaster(AM):管理应用的调度和协调。负责:1)与RM的资源调度器协商以获取资源;2)将得到的资源分配给内部任务;3)与NoodeManager通信以启动、停止任务;4)监控所有任务状态,并在任务运行失败时重新运行任务
3、 NodeManager:负责每个节点上资源和任务的管理,主要负责1)定时向RM汇报本节点上的资源使用情况和各个Container的运行状态;2)接受并处理来自AM的Container的启动/停止请求。
4、 Container:容器是动态资源的分配单位,负责封装某个节点上的资源,当AM向RM申请资源时,RM为AM返回的资源以Container表示。
2.2 Yarn工作流程
(1)提交应用及其使用到的资源
用户向YARN中RM提交应用程序,其中包括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进行通信。
(6)NM启动任务
NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务(Container)。如果该应用程序第一次在给节点上启动任务,则NM首先从HDFS上下载文件缓存到本地,然后启动该任务。
(7)任务状态汇报
在Container内执行用户提交的代码,各个Container通过RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
(8)运行完毕
应用程序运行完成后,AM向RM注销并关闭自己。
2.3 整体代码结构
核心代码组件目录包括以下几个部分:
hadoop-yarn-api – Yarn跨平台外部接口,同时也包括了RM、AM、NM之间交互的接口;
hadoop-yarn-application:Yarn AM的编程实例。
hadoop-yarn-client:Yarn 客户端实现,提交任务的发起端
hadoop-yarn-common:基础组件,包括ipc,protobuf,event dispatcher,state machine等实现,可以被client和server使用。
hadoop-yarn-register:目前不确定是什么用处,待确定
hadoop-yarn-server:对hadoop-yarn-api的实现,其中包含了对NM,RM的实现,以及NM和RM之间共享API的实现
因博客文章字数受限,下一篇我们继续探讨~~~
【Free Style】Hadoop-Yarn之Resource Manager源码分析(二)
https://portal.huaweicloud.com/blogs/4abcd5ebc04811e7b8317ca23e93a891
- 点赞
- 收藏
- 关注作者
评论(0)