菜鸟浅析资源管理调度框架Yarn
00.前言回顾
资源管理层作为Hadoop的管理中枢,主要负责两个事情:
各个节点信息的搜集,如负载状况,资源使用情况等,方便调度决策。
应用的管理和任务的调度,可以管理很多的应用,并监控每个应用的运行。
01. MR1缺陷
我们在讲MapReduce时,也介绍过MapReduce1.0不仅做计算处理框架,还负责任务调度与资源管理。MR1采用Master/Slave结构设计,包括一个JobTracker和若干个TaskTracker,前者负责作业的调度和资源的管理,后者负责执行JobTracker指派的具体任务。
这种架构设计会直接导致一些很难克服的缺陷:
存在单点故障,如果JobTracker挂了后,就会导致系统不可用。
JobTracker“大包大揽”导致任务过重。
容易出现内存溢出:当两个具有较大内存消耗的任务被分配到同一个TaskTracker时,容易发生内存溢出的情况。
YARN的基本思路就是“放权”,即不让JobTracker这一组件承担过多的功能,把原JobTracker的功能:资源管理、任务调度和任务监控进行了拆分,分别交给不同的新组件去处理。
重新设计后得到的YARN包括ResourceManager、ApplicationMaster和NodeManager,其中,由ResourceManager负责资源管理,由ApplicationMaster负责任务调度和监控,由NodeManager负责执行原TaskTracker的任务。
通过这种“放权”的设计,大大降低了JobTracker的负担,提升了系统运行的效率和稳定性。
在Hadoop1.0中,其核心子项目MapReduce1.0既是一个计算框架,也是一个资源管理调度框架。到了Hadoop2.0以后,MapReduce1.0中的资源管理调度功能被单独分离出来形成了YARN,它是一个纯粹的资源管理调度框架,而不是一个计算框架。
而被剥离资源管理调度功能的MapReduce框架就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己负责资源调度管理服务,而是由YARN为其提供资源管理调度服务。
03.YARN体系架构
1、ResourceManager:
-
处理客户端请求 -
启动 / 监控 ApplicationMaster -
监控 NodeManager -
资源分配与调度
2、ApplicationMaster:
-
数据切分 -
为应用程序申请资源,并分配给内部任务 -
任务监控与容错
3、NodeManager:
-
单个节点上的资源管理 -
处理来自 ResourceManager 的命令 -
处理来自 ApplicationMaster 的命令
04.YARN运行流程
-
用户向YARN 中提交应用程序, 其中包括 ApplicationMaster 程序、启动ApplicationMaster 的命令、用户程序等。 -
ResourceManager 为该应用程序分配第一个 Container, 并与对应的NodeManager 通信,要求它在这个Container 中启动应用程序的 ApplicationMaster。 -
ApplicationMaster 首先向ResourceManager 注册, 这样用户可以直接通过ResourceManage 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运 行状态,直到运行结束。 -
ApplicationMaster 采用轮询方式通过协议向ResourceManager 申请和领取资源。 -
ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。 -
NodeManager 为任务设置好运行环境后,将任务启动命令写到程序中执行。 -
各个任务通过某个协议向 ApplicationMaster 汇报自己的状态和进度,以让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 -
应用程序运行完成后, ApplicationMaster 向ResourceManager 注销并关闭自己。
05. YARN的终极目标
YARN的提出并非仅仅为了解决MR1框架中存在的缺陷,实际上,YARN有着更加“宏伟”的发展构想,即发展成为集群中统一的资源管理调度框架,在一个集群中为上层的各种计算框架提供统一的资源管理调度服务。
以上是关于资源管理调度框架YARN的浅析,我做菜鸟浅析系列的目的就是督促自己在了解学习了一些大数据架构或者技术的同时,也能把一些认为好的知识点分享给大家。
接下来我会写一些产品设计相关的文章,菜鸟浅析Hadoop系列文章我也会努力更新下去。