YARN(一)-- 产生原因及概述

2018-10-30  本文已影响91人  小北觅

本文内容如下:

首先说一下YARN是什么吧:

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)。

YARN是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决旧MapReduce框架的不足。

一、旧MapReduce框架的不足

下图是旧MapReduce框架的Hadoop集群架构:


一个 Hadoop 集群可分解为两个抽象实体:MapReduce 计算引擎和分布式文件系统。当一个客户端向一个 Hadoop 集群发出一个请求时,此请求由 JobTracker 管理。JobTracker 与 NameNode 联合将任务分发到离它所处理的数据尽可能近的位置。然后JobTracker 将 Map 和 Reduce 任务安排到一个或多个 TaskTracker 上的可用插槽中。TaskTracker 与 DataNode一起对来自 DataNode 的数据执行 Map 和 Reduce 任务。当 Map 和 Reduce 任务完成时,TaskTracker 会告知 JobTracker,后者确定所有任务何时完成并最终告知客户作业已完成。

缺点:

二、YARN的基本原理

为了解决旧框架的问题,YARN将资源管理和作业监控/调度这两个功能拆分开来,交由不同的守护进程完成。具体来说就是有一个全局的资源管理者(ResourceManager or RM)和负责每一个应用的应用管理者(ApplicationMaster or AM)。

下图是官网上的YARN架构图:


ResourceManager 和每个slave节点的NodeManager (NM)构成一个计算框架。ResourceManager 对在系统中所有应用的资源分配拥有最终的最高级别仲裁权。NodeManager负责管理contrainer、监控资源使用情况(cpu、内存、磁盘、网络等),并向ResourceManager/Scheduler上报。

每个应用的ApplicationMaster(AM)被用来和ResourceManager 进行资源谈判,并且和NodeManager一起执行和监控tasks。

其中ResourceManager 拥有两个主要的组件:调度器(Scheduler) 和资源管理器(ApplicationsManager)

Scheduler主要负责对整个集群(CPU,内存)的资源进行分配和调度,分配资源以Container(可以理解为节点上的一组CPU和内存资源)的形式分发到各个应用程序中(如MapReduce作业),应用程序与资源所在节点的NodeManager协作利用Container完成具体的任务(如Reduce Task)。注意:Scheduler是个纯粹的调度器,意思是他不参与任何监控跟踪应用状态的工作,也不会保证在任务失败后重新启动任务。

Scheduler以可插拔的形式来配置,框架默认提供了三种Scheduler:
①FIFO Scheduler
②Capacity Scheduler
③Fair Scheduler
由于本文只是初步介绍YARN,所以这些细节后面的文章再搞定。

Container
Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是:一个节点会运行多个Container,但一个Container不会跨节点。

既然一个Container指的是具体节点上的计算资源,这就意味着Container中必定含有计算资源的位置信息:计算资源位于哪个机架的哪台机器上。所以我们在请求某个Container时,其实是向某台机器发起的请求,请求的是这台机器上的CPU和内存资源。

下面说RM的另一个组成部分:ApplicationsManager。
注意不要把它和ApplicationMaster搞混了。

ApplicationsManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container。

找到了一个Stack Overflow上介绍ApplicationsManager的回答。可以扩展阅读以下。

三、总结

3.1 YARN相对于旧的MapReduce框架的优势:

这个设计大大减小了 ResourceManager 的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。

3.2 Yarn基本原理总结

客户端向ResourceManager提交应用并请求一个ApplicationMaster实例,一个应用只有一个ApplicationMaster实例。ResourceManager找到可以运行一个Container的NodeManager,并启动ApplicationMaster实例。NodeManager会上报资源的状态给RM。客户端的任务在Container中执行,直到程序结束,ApplicationMaster关闭,并把Container归还给系统。

参考资料
[Apache Hadoop YARN](Apache Hadoop YARN)

上一篇 下一篇

猜你喜欢

热点阅读