YARN集群

一、概述

1. 主节点 ResourceManager**

ResourceManager 是基于应用程序对集群资源的需求进行调度的 YARN 集群主控节点,负责协调和管理整个集群(所有 NodeManager)的资源,响应用户提交的不同类型应用程序的解析,调度,监控等工作。ResourceManager 会为每一个 Application 启动一个 MRAppMaster,并且 MRAppMaster 分散在各个 NodeManager 节点,它主要由两个组件构成:调度器(Scheduler)和应用程序管理(ApplicationsManager,ASM)
YARN 集群的主节点 ResourceManager 的职责:
1、 处理客户端请求
2、 启动或监控 MRAppMaster
3、 监控 NodeManager
4、 资源的分配与调度

2. 从节点 NodeManager

NodeManager 是 YARN 集群当中真正资源的提供者,是真正执行应用程序的容器的提供者,监控应用程序的资源使用情况(CPU,内存,硬盘,网络),并通过心跳向集群资源调度器 ResourceManager 进行汇报以更新自己的健康状态。同时其也会监督 Container 的生命周期管理,监控每个 Container 的资源使用(内存、CPU 等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。
YARN 集群的从节点 NodeManager 的职责:
1、 管理单个节点上的资源
2、 处理来自 ResourceManager 的命令
3、 处理来自 MRAppMaster 的命令

3. 应用程序MRAppMaster

MRAppMaster 对应一个应用程序,职责是:向资源调度器申请执行任务的资源容器,运行任务,监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况报告。

4. 容器Container

Container 容器是一个抽象出来的逻辑资源单位。容器是由 ResourceManager的资源调度器Scheduler 服务动态分配的资源构成,它包括了该节点上的一定量 CPU,内存,磁盘,网络等信息,MapReduce 程序的所有 Task 都是在一个容器里执行完成的,容器的大小是可以动态调整的 。

5. 应用程序管理器 ASM

ASM 负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动 MRAppMaster、监控 MRAppMaster 运行状态并在失败时重新启动它等 。

6. 资源调度器Scheduler

Scheduler根据应用程序的资源需求进行资源分配,不参与应用程序具体的执行和监控等工作资源分配的单位就是 Container,调度器是一个可插拔的组件,用户可以根据自己的需求实现自己的调度器。YARN 本身为我们提供了多种直接可用的调度器,比如 FIFO,Fair Scheduler 和 Capacity Scheduler 等 。

7. YARN 架构及各角色职责

在这里插入图片描述
YARN 作业执行流程:
在这里插入图片描述
在这里插入图片描述
1、 用户向 YARN 中提交应用程序,其中包括 MRAppMaster 程序,启动 MRAppMaster 的命令,用户程序等。
2、 ResourceManager 为该程序分配第一个 Container,并与对应的 NodeManager 通讯,要求它在这个 Container 中启动应用程序 MRAppMaster。
3、 MRAppMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后将为各个任务申请资源,并监控它的运行状态,直到运行结束,重复 4 到 7 的步骤。
4、 MRAppMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。
5、 一旦 MRAppMaster 申请到资源后,便与对应的 NodeManager 通讯,要求它启动任务。
6、 NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7、 各个任务通过某个 RPC 协议向 MRAppMaster 汇报自己的状态和进度,以让 MRAppMaster 随时掌握各个任务的运行状态,从而可以在任务败的时候重新启动任务。
8、 应用程序运行完成后,MRAppMaster 向 ResourceManager 注销并关闭自己。

8、 资源调度器

Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。

1.先进先出调度器(FIFO)
存在的问题:如果有紧急的任务,却要等到前面的先执行完;

2.容量调度器(Capacity Scheduler)就是多个FIFO队列并行 (默认的调度器)占据集群的资源。
存在的问题:如果queueC很闲,它所占据的资源不会给queueA和queueB;

3.公平调度器(Fair Scheduler)
可插拔(任务可来可不来,可以运行各种任务(如MapReduce| spark等任务))式分层队列。
缺额:按照所需要的资源数量来分配资源;
如果queueB中有任务了,而A和C是空闲的,则A和C中的资源会都给queueB(占据集群所有资源),如果C有其他任务了,会从B中抢资源过来;
多级队列叠加:queueB中还可以再分queueD和queueE各占50%,相当于各占整个集群的25%;如果某个任务优先级比较低就可以把它放到队列的深层级处(按队列的层级来管理任务的优先级—公平);
每个队列所占据的资源不是死的,取决于任务的紧迫度;根据任务公平的按比例分配资源;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值