本文介绍: Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.x 引入分布式资源管理系统。主要用于解决 hadoop 1.x 架构集群资源管理数据计算耦合在一起,导致维护成本越来越高的问题用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理资源分配。

一、yarn 简介

Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.x 引入分布式资源管理系统。主要用于解决 hadoop 1.x 架构集群资源管理和数据计算耦合在一起,导致维护成本越来越高的问题

yarn主要负责管理集群中的CPU和内存

用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理资源分配。

在这里插入图片描述

二、yarn架构

yarn架构中主要包括ResourceManager和NodeManager

1. ResourceManager

yarn集群的主节点支持1个或2个,是整个集群资源的主要协调者和管理者

ResourceManager 负责给用户提交的所有应用程序分配资源,它根据应用程序优先级队列容量、ACLs、数据位置信息,做出决策,然后共享的、安全的、多租户的方式制定分配策略调度集群资源

2. NodeManager

yarn集群的从节点支持1个或多个,主要负责当前节点的管理,监视资源和跟踪节点健康。具体如下:

3. Container

对任务环境进行抽象封装了CPU和内存环境变量启动命令等任务运行信息

YARN 会为每个子任务分配一个 Container,子任务只能使用该 Container 中描述的资源

4. ApplicationMaster

负责应用程序相关的事务,例如任务调度,任务监控

在用户提交一个应用程序时,YARN 会启动一个轻量级进程 ApplicationMaster。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器内资源的使用情况,同时还负责任务的监控与容错。具体如下:

理解比如flink任务运行过程中,去机器上干掉一个tm然后发现flink任务很快就恢复了,这个事情应该就是AM来做的

三、yarn工作原理简述

在这里插入图片描述

  1. Client 提交作业到 YARN 上
  2. Resource Manager 选择一个 Node Manager,启动一个 Container 并运行 Application Master 实例
  3. Application Master 根据实际需要向 Resource Manager 请求更多的 Container 资源(如果作业很小, 应用管理器选择在其自己的 JVM 中运行任务)
  4. Application Master 通过获取到的 Container 资源执行分布式计算

四、YARN工作原理详述

1. MapReduce任务

以MapReduce任务为例说明yarn的工作原理

在这里插入图片描述

  1. 作业提交

    client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业 (第 1 步) 。新的作业 ID(应用 ID) 由资源管理器分配 (第 2 步)。作业client 核实作业输出, 计算输入split, 将作业的资源 (包括 Jar 包,配置文件, split 信息) 拷贝给 HDFS(第 3 步)。 最后, 通过调用资源管理器的 submitApplication() 来提交作业 (第 4 步)。

  2. 作业初始化

    当资源管理器收到 submitApplciation() 的请求时, 就将该请求发给调度器 (scheduler), 调度器分配 container, 然后资源管理器在该 container启动应用管理器进程, 由节点管理器监控 (第 5 步)。

    MapReduce 作业的应用管理器一个主类为 MRAppMaster 的 Java 应用,其通过创造一些 bookkeeping 对象监控作业的进度, 得到任务的进度和完成报告 (第 6 步)。然后其通过分布式文件系统得到由客户端计算好的输入 split(第 7 步),然后为每个输入 split 创建一个 map 任务, 根据 mapreduce.job.reduces 创建 reduce 任务对象

  3. 任务分配

    如果作业很小, 应用管理器会选择在其自己的 JVM 中运行任务。

    如果不是小作业, 那么应用管理器向资源管理器请求 container 来运行所有的 mapreduce 任务 (第 8 步)。这些请求是通过心跳来传输的, 包括每个 map 任务的数据位置比如存放输入 split主机名和机架 (rack),调度器利用这些信息调度任务,尽量将任务分配给存储数据的节点, 或者分配给和存放输入 split节点相同机架的节点。

  4. 任务运行

    一个任务由资源管理器的调度器分配给一个 container 后,应用管理器通过联系节点管理器来启动 container(第 9 步)。任务由一个主类为 YarnChild 的 Java 应用执行, 在运行任务之前首先本地化任务需要的资源,比如作业配置,JAR 文件, 以及分布式缓存的所有文件 (第 10 步。 最后, 运行 map 或 reduce 任务 (第 11 步)。

    YarnChild 运行在一个专用的 JVM 中, 但是 YARN 不支持 JVM 重用。

  5. 进度和状态更新

    YARN 中的任务将其进度和状态 (包括 counter) 返回给应用管理器, 客户端每秒 (通 mapreduce.client.progressmonitor.pollinterval 设置) 向应用管理器请求进度更新, 展示给用户。

  6. 作业完成

    除了向应用管理器请求作业进度外, 客户端每 5 分钟都会通过调用 waitForCompletion() 来检查作业是否完成,时间间隔可以通过 mapreduce.client.completion.pollinterval设置。作业完成之后, 应用管理器和 container 会清理工作状态, OutputCommiter 的作业清理方法也会被调用。作业的信息会被作业历史服务器存储以备之后用户核查。

2. Flink任务

以Flink任务为例说明yarn的工作原理

在这里插入图片描述

五、YARN中的资源调度

实际使用过程中,集群的资源是有限的,当集群资源被占到99%,但有一个紧急的任务需要立即执行时,我们只能杀死正在执行的任务,为新来的任务腾地方

为从源头解决这种问题需要给yarn选择合适的资源调度

yarn中一共支持三种资源调度

实际工作中,Capacity schedular是应用最广泛的,同时也是yarn默认的资源调度器

原文地址:https://blog.csdn.net/kazuhura/article/details/134693532

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10227.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注