Yarn(分布式资源管理框架)

Yarn 【分布式资源管理框架】

Yarn 的引入

在 MapReduce 应用程序的启动过程中,最重要的就是要把 MapReduce 程序分发到大数据集群的服务器上,然而随着大数据技术的发展,各种新的计算框架不断出现,我们不可能为每一种计算框架部署一个服务器集群,而且就算能部署新集群,数据还是在原来集群的 HDFS 上。

所以我们需要把 MapReduce 的资源管理和计算框架分开,这也是 Hadoop 2 最主要的变化,就是将 Yarn 从 MapReduce 中分离出来,成为一个独立的资源调度框架。

YARN(Yet Another Resource Negotiator)核心思想:将资源管理和任务的监控和调度分离
Yarn 的核心组件:
资源管理器(ResourceManager)

ResourceManager的功能:

处理客户端请求

监控NodeManager

启动和监控ApplicationMaster,进行必要的重启

负责整个集群的资源调度管理,通常部署在独立的服务器上。

资源管理器包括两个主要组件:

一个是资源调度器(ResourceScheduler),

ResourceScheduler 其实就是一个资源分配算法,根据应用程序(Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。

一个是应用程序管理器(ApplicationManager),

负责接受Client端传输的job请求。

节点管理器(NodeManager)

NodeManager 进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动,基本上跟 HDFS 的 DataNode 进程一起出现。

定时向 ResourceManager 汇报本节点上的资源使用情况和各个Container的运行情况。

接收和处理来自 ResourceManager 的 Container 启动和停止的各种命令。

处理来自 ApplicationMaster 的指令,比如启动 MapTask 和 ReduceTask 指令。

ApplicationMaster

每个应用程序对应一个ApplicationMaster,负责单个应用程序的管理

负责数据切片

为应用程序向 ResourceManager 申请资源(Container),并分配内部任务(MapTask和ReduceTask)

与NodeManager通信来启动/停止任务(Task都是运行在 Container 中的)

负责任务的监控和容错,当某些Task运行出错,进行容错处理

Container

Yarn 进行资源分配的单位是容器(Container),每个容器包含了一定量的内存、CPU 等计算资源,默认配置下,每个容器包含一个 CPU 核心。

容器由 NodeManager 进程启动和管理,NodeManger 进程会监控本节点上容器的运行状况并向 ResourceManger 进程汇报。

Yarn 执行流程

在这里插入图片描述
(1)提交作业(Submit Job):

用户或应用程序通过客户端(Client)提交作业,并申请一个 jobID。这个作业包含了执行所需的所有信息,比如 JAR 包、配置信息和分片信息等。

(2)上传资源到 HDFS(Upload Resources to HDFS):

客户端将运行作业所需的资源(如 JAR 包、配置信息等)上传到 HDFS(Hadoop Distributed File System)上的一个特定路径。

(3)创建 ApplicationMaster(Create ApplicationMaster):

客户端在上传资源后,创建一个 ApplicationMaster 的实例,ApplicationMaster 是作业管理的守护进程,负责协调整个作业的执行。

(4)向 ResourceManager 发送请求(Send Request to ResourceManager):

客户端向 ResourceManager 发送执行作业的请求,并提供 HDFS 上传资源的路径。ResourceManager 是 YARN 中负责资源管理和作业调度的组件。

(5)ResourceManager 返回作业ID(ResourceManager Returns JobID):

ResourceManager 处理客户端的请求,并返回一个作业ID。同时,它将资源路径返回给客户端。

调度器分配资源(Scheduler Allocates Resources):
ResourceManager 将请求转发到调度器(Scheduler),调度器根据资源请求和集群状态,决定分配给作业的资源。

(6)开辟资源(Container):

一旦调度器决定了资源分配,它会通知 NodeManager 开辟资源(Container)。Container 是 YARN 中的一个概念,它提供了作业执行所需的资源环境。

(7)ApplicationMaster 获取文件(ApplicationMaster Retrieves Files):

ApplicationMaster 从 HDFS 上获取提交的文件和资源。

(8)ApplicationMaster 创建 MapTask 和 ReduceTask(Create Map and Reduce Tasks):

ApplicationMaster 根据作业的需求和 HDFS 上的数据切片信息(InputSplit),创建 MapTask 和 ReduceTask。

(9)通知 NodeManager 启动任务(Notify NodeManager to Start Tasks):

ApplicationMaster 通知 NodeManager 启动 MapTask 和 ReduceTask。

(10)NodeManager 启动任务(NodeManager Starts Tasks):

NodeManager 在 Container 中启动 MapTask 和 ReduceTask。

(11)MapTask 和 ReduceTask 接受数据(Tasks Accept Data):

MapTask 和 ReduceTask 接受共享文件数据,开始执行任务。

(12)任务执行(Task Execution):

MapTask 读取输入数据,处理后输出结果。ReduceTask 接收来自 MapTask 的输出,并进行进一步的处理。

(13)任务完成(Task Completion):

当所有任务完成后,ApplicationMaster 会向 ResourceManager 请求释放资源,并最终完成整个作业。

Yarn 资源调度器

在这里插入图片描述

先进先出调度器(FIFO)(First In, First Out) 【单队列的先进先出】

按照任务到达的顺序来分配资源,不考虑任务的优先级或其他属性

FIFO 调度器将所有的任务放入一个队列中。这个队列遵循先入先出的原则,即最先进入队列的任务将最先被处理

FIFO 调度器不考虑任务的紧急性或重要性,因此可能不适合需要优先处理某些任务的场景

容器调度器(Capacity Scheduler) 【预定义的分层多队列】

容量调度器是一种较为传统的调度策略,它提供了一种分层队列的资源管理方式,允许管理员预定义队列结构并为每个队列分配资源容量。

Capacity Scheduler 支持队列间的资源隔离,并且可以为不同的队列设置不同的调度策略,如 FIFO、Fair 或者其他自定义策略。

这种策略的优点在于能够保证长期运行的任务获得稳定的资源供应,但缺点是在资源紧张时可能会限制新任务的执行。

公平调度器(Fair Scheduler) 【动态调整】

不需要事先配置队列容量,而是根据应用程序的需求和资源的可用性来动态分配资源

适用于多个小型作业或用户数量较多的场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值