文章目录
Hadoop之Yarn重点架构原理
一、Yarn介绍
二、Yarn架构
三、Yarn任务运行流程
四、Yarn三种资源调度器特点及使用场景
Apache Hadoop Yarn(Yet Another Reasource Negotiator,另一种资源协调者)是Hadoop2.x版本后使用的资源管理器,可以为上层应用提供统一的资源管理平台。
Yarn主要由ResourceManager、NodeManager、ApplicationMaster、Container组成。
ResourceManager
ResourceManager是Yarn集群中的中央管理器,负责整个集群的资源分配与调度。ResourceManager负责监控NodeManager节点状态、汇集集群资源,处理Client提交任务的资源请求,为每个Application启动AppliationMaster并监控。
NodeManager
NodeManager负责管理每个节点上的资源(如:内存、CPU等)并向ResourceManager报告。当ResourceManager向NodeManager分配一个容器(Container)时,NodeManager负责启动该容器并监控容器运行,此外,NodeManager还会接收AplicationMaster命令为每个Application启动容器(Container)。
ApplicationMaster
每个运行在Yarn中的应用程序都会启动一个对应的ApplicationMaster,其负责与ResourceManager申请资源及管理应用程序任务。ApplicationMaster本质上也是一个容器,由ResourceManager进行资源调度并由NodeManager启动,ApplicationMaster启动后会向ResourceManager申请资源运行应用程序,ResourceManager分配容器资源后,ApplicationMaster会连接对应NodeManager通知启动Container并管理运行在Container上的任务。
Container
Container 容器是Yarn中的基本执行单元,用于运行应用程序的任务,它是一个虚拟环境,包含应用程序代码、依赖项及运行所需资源(内存、CPU、磁盘、网络)。每个容器都由ResourceManager分配给ApplicationMaster,并由NodeManager在相应的节点上启动和管理。容器的资源使用情况由NodeManager监控,并在必要时向ResourceManager报告。
Yarn核心就是将MR1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现,ResourceManager负责整个集群的资源管理和调度;ApplicationMaster负责应用程序任务调度、任务监控和容错等。
在客户端向Yarn中提交MR 任务,首先会将MR任务资源(Split、资源配置、Jar包信息)上传到HDFS中。
客户端向ResourceManager申请启动ApplicationMaster。
ResourceManager会选择一台相对不忙的NodeManager节点,通知该节点启动ApplicationMaster(Container)。
ApplicationMaster启动之后,会从HDFS中下载MR任务资源信息到本地,然后向ResourceManager申请资源用于启动MR Task。
ResourceManager返回给ApplicationMaster资源清单。
ApplicationMaster进而通知对应的NodeManager启动Container
Container启动之后会反向注册到ApplicationMaster中。
ApplicationMaster 将Task任务发送到Container 运行,Task任务执行的就是我们写的代码业务逻辑。
FIFO调度器(First-In-Fist-Out Scheduler),Yarn中最简单的调度器。FIFO Scheduler 会将提交的应用程序按提交顺序放入一个先进先出的队列中,进行资源分配时,先给队列中最头上的应用分配资源,待头上的应用资源需求满足后再给下一个应用分配资源,以此类推。这种调度器调度资源时,有可能某个资源需求大的应用占用所有集群资源,从而导致其他的应用被阻塞。
Capacity调度器(Capacity Schduler)是Yarn中默认配置的资源调度器,允许多租户安全地共享一个大型集群。Capacity调度器中,支持配置多个资源队列,可以为每个资源队列指定最低、最高可使用的资源比例,在进行资源分配时,优先将空闲资源分配给“实际资源/预算资源”比值最低的队列,每个资源队列内部采用FIFO调度策略。
Fair调度器(Fair Scheduler)是一个将Yarn资源公平的分配给各个Application的资源调度方式,这种调度方式可以使所有Application随着时间的流逝可以获取相等的资源份额,其设计目标就是根据定义的参数为所有的Application分配公平的资源。
Yarn中FIFO、Capacity、Fair三种资源调度器区别对比如下:
Yarn资源调度器 | 特点 | 适用场景 |
FIFO调度器 | 1、简单易懂,无需额外配置。 2、应用按照提交的先后顺序(先进先出)运行。 3、不适合共享集群,每个应用必须等待直到轮到自己运行。 |
非共享集群,对任务执行顺序要求不高的场景。生产环境一般不用。 |
Capacity调度器 (开源Yarn默认使用) |
1、允许多个组织共享集群资源,每个组织拥有专门的队列。 2、支持队列的层次划分,以及队列资源的灵活配置。 3、可以限制队列的最大容量,缓解资源竞争。 |
共享集群的场景,多个组织或团队共享同一集群资源的情况。 |
Fair调度器 (CDH默认使用) |
1、公平地为所有运行的应用分配资源,支持多个队列间的资源公平共享。 2、支持动态创建队列,并通过一套规则系统确定应用的放置位置。 3、支持资源的抢占功能,确保资源的公平分配。 |
1、 多个用户或组织在共享集群中需要公平地获得资源的场景。 2、 对队列级别的资源控制和细粒度调度策略要求较高的环境。 |