Yarn概述

article/2025/9/26 6:28:15

Yarn

Yarn是Hadoop的分布式资源调度平台,负责为集群的运算提供运算资源。如果把分布式计算机和单个计算机相对应的话,HDFS就相当于计算机的文件系统,Yarn就是计算机的操作系统,MapReduce就是计算机上的应用程序。

Yarn的基本组成

在这里插入图片描述
Yarn主要由三个组件组成。

  • ResourceManager:他是整个集群资源的老大,负责整个集群系统的资源分配与调度。
  • NodeManager:他是单个节点的老大,管理本节点的用户作业和工作流。
  • ApplicationMaster:他是单个应用程序的老大,负责单个应用的监控运行。

除了这三个组件,首先要说明一个不得不提的概念:Container

Container

在Yarn中,Container代表着Yarn对计算机资源的抽象,每个容器内包含了CPU、内存、磁盘等运算资源。所有的应用都会运行在Container中,应用向ResourceManager申请Container后运行ApplicationMaster,再根据任务向ResourceManager申请拿到任务下Task的Container。

ResourceManager

ResourceManager是整个集群资源的老大,负责整个集群的资源调度,他与每个节点上的NodeManager和每一个应用程序上的ApplicationMaster协调工作。他的主要职责是调度系统中所需的各种可用资源,着眼于应用程序之间的资源调度,并不会关注每个应用程序的状态管理。

ResouceManager主要有两个组件:Scheduler和ApplicationManager。

Scheduler

是一个资源调度器,负责各个运行中的应用的资源分配。和他的名字一样,他只负责给应用分配资源,即Container,不会关心或监控应用程序的具体状态。同样他也不能去重启各种运行失败的应用。对于多个客户端的应用资源请求,Scheduler会将这些作业放在一个或者多个作业队列中,并按照设置的调度方法分配Container。在Hadoop的MapReduce中主要有三种调度方法:FIFO Scheduler、Capacity Scheduler和Fair Scheduler。
在这里插入图片描述

FIFO Scheduler:单个队列,先进先出,一般生产环境不使用。
Capacity Scheduler:容量调度器。创建多个队列,为每个队列设置最小资源和最大资源,针对不同的任务队列,可以设置不同的资源权重。队列之间可以互相借用资源,单个队列内采用FIFO原则。适合低负载的情况。
Fair Scheduler:公平调度器。为每个任务公平地动态调整资源,保证资源公平分配,若在分配途中有新的任务加入,则在一定的时间内(并不是立刻,因为需要等待前面的任务释放占用的Container)调整所有任务的所得资源,使得每个作业最终得到相同的资源。

ApplicationManager

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

NodeManager

NodeManager负责单个节点的老大,每个节点都有自己的NodeManager。NodeManager是一个slave服务:它负责接收ResourceManager的资源分配请求,分配具体的Container给应用。同时,它还负责监控并报告Container使用信息给ResourceManager。通过和ResourceManager配合,NodeManager负责整个Hadoop集群中的资源分配工作。ResourceManager是一个全局的进程,而NodeManager只是每个节点上的进程,管理这个节点上的资源分配和监控运行节点的健康状态。

NodeManager的主要职责如下:

  • 接收ResourceManager的请求,分配Container给应用的某个任务
  • 和ResourceManager交换信息以确保整个集群平稳运行。ResourceManager就是通过收集每个NodeManager的报告信息来追踪整个集群健康状态的,而NodeManager负责监控自身的健康状态。
  • 管理每个Container的生命周期
  • 管理每个节点上的日志
  • 执行Yarn上面应用的一些额外的服务,比如MapReduce的shuffle过程

当一个节点启动时,它会向ResourceManager进行注册并告知ResourceManager自己有多少资源可用。在运行期,通过NodeManager和ResourceManager协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态。

NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。负责管理应用信息的组件是ApplicationMaster。

ApplicationMaster

ApplicationMaster是单个应用程序的老大,向ResourceManager申请资源并和NodeManager协同工作来运行应用的各个任务,然后跟踪它们状态及监控各个任务的执行,遇到失败的任务还负责重启它。

当一个ApplicationMaster启动后,会周期性的向ResourceManager发送心跳报告来确认其健康和所需的资源情况,在建好的需求模型中,ApplicationMaster在发往ResourceManager中的心跳信息中封装偏好和限制。在随后的心跳中,ApplicationMaster会对收到集群中特定节点上绑定了一定的资源的container的租约,根据ResourceManager发来的container,ApplicationMaster可以更新它的执行计划以适应资源不足或者过剩,Container可以动态的分配和释放资源。

Yarn工作机制

在这里插入图片描述

  1. 客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例。
  2. ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例。
  3. ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了。
  4. 在平常的操作过程中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求。
  5. 当Container被成功分配之后,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动Container,container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料。
  6. 应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster。
  7. 在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议。
  8. 一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统。

Resource Request和Container

Yarn的设计目标就是允许我们的各种应用以共享、安全、多租户的形式使用整个集群。并且,为了保证集群资源调度和数据访问的高效性,Yarn还必须能够感知整个集群拓扑结构。为了实现这些目标,ResourceManager的调度器Scheduler为应用程序的资源请求定义了一些灵活的协议,通过它就可以对运行在集群中的各个应用做更好的调度,因此,这就诞生了Resource Request和Container。

具体来讲,一个应用先向ApplicationMaster发送一个满足自己需求的资源请求,然后ApplicationMaster把这个资源请求以resource-request的形式发送给ResourceManager的Scheduler,Scheduler再在这个原始的resource-request中返回分配到的资源描述Container。每个ResourceRequest可看做一个可序列化Java对象,包含的字段信息如下:

<resource-name, priority, resource-requirement, number-of-containers>
  • resource-name:资源名称,现阶段指的是资源所在的host和rack,后期可能还会支持虚拟机或者更复杂的网络结构
  • priority:资源的优先级 resource-requirement:资源的具体需求,现阶段指内存和cpu需求的数量
  • number-of-containers:满足需求的Container的集合

number-of-containers中的Containers就是ResourceManager给ApplicationMaster分配资源的结果。Container就是授权给应用程序可以使用某个节点机器上CPU和内存的数量。

ApplicationMaster在得到这些Containers后,还需要与分配Container所在机器上的NodeManager交互来启动Container并运行相关任务。当然Container的分配是需要认证的,以防止ApplicationMaster自己去请求集群资源。

参考:
https://www.cnblogs.com/zsql/p/11636112.html
https://blog.csdn.net/suifeng3051/article/details/49508261
https://blog.csdn.net/suifeng3051/article/details/49486927


http://chatgpt.dhexx.cn/article/vfwQDu0o.shtml

相关文章

Yarn介绍

Yarn介绍 一&#xff0c;介绍二&#xff0c; yarn 框架三&#xff0c;ResourceManager3.1&#xff0c;ApplicationsManager3.2&#xff0c;Scheduler 四&#xff0c;NodeManager五&#xff0c;ApplicationMaster六&#xff0c;客户端提交任务到yarn中运行的流程。 YARN的基本思…

Yarn

应用场景 当部署好hadoop集群后,搭建了YARN集群,开启了hadoop的HDFS和YARN服务,访问主节点IP和8088端口的YARN监控界面,发现这个All Applications界面中的开始执行时间和结束执行时间不对,应该往后加8个小时才对,导致在页面中对任务监控的时候容易出错,所以现在要进行修…

Yar 搭建 RPC 服务

一、安装 Yar pecl install yar pecl install msgpack 二、确保 php 加载 yar 模块 php -m 三、编写服务器端 Server.php &#xff0c; 在浏览器打开 http://.../Server.php 可见API的介绍如下 <?phpclass API {public function some_method($parameter, $options &…

[Yar] yar安装与使用过程中遇到问题总结

yar安装与使用过程中遇到问题总结 Yar 简介官方文档yar安装yar运行时的默认配置yar常量使用范例遇到的问题应用流程 Yar 简介 Yar 是一个轻量级, 高效的RPC框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持…

PHP封装curd,ThinkPHP5.0的模型CURD创建Create操作

模型的主要功能包括数据处理和业务逻辑&#xff0c;而这些都离不开数据的CURD操作&#xff0c;因此我们首先来谈下数据的CURD操作&#xff0c;在掌握了数据库Db类的用法后&#xff0c;模型的CURD操作就会很容易理解&#xff0c;因为本质上模型的CURD操作最终调用的还是Db类的操…

浅谈CURD系统和CRQS系统

浅谈CURD系统和CRQS系统 在网上看到关于这个内容的介绍&#xff0c;就想着自己整理一下&#xff0c;方便观看。 三层架构 先从三层架构开始讲&#xff0c;三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑…

Vue入门之Web端CURD前端项目示例

Vue入门之Web端CURD前端项目示例 随着vue.js越来越火&#xff0c;很多不太懂前端的小伙伴想要入坑。而入坑最好的办法就是上手实际操作&#xff0c;因此本文将重点放在实际操作上&#xff0c;对理论不做过多解释&#xff0c;不明白的地方小伙伴们可以去看官方文档或者相关书籍…

fastadmin一键生成CURD

1.登录后台以后安装在线命令插件 2.CRUD fastadmin自带一个test表可以用来测试&#xff0c;或者是自己在数据库随便新建一个表也行 自定义模块名这样填的话就是在admin->controller下->新建一个名为test文件夹 只写test的话是在 controller 目录下面 然后点击生成命令行…

php跨域curd,SpringBoot+Vue前后端分离(CURD)Demo

我发现我好久没有更新了&#xff0c;写一篇证明我还活着。 既然是前后端分离的话&#xff0c;肯定是要有前端和后端的。 这里前端我使用的VueElementUI,后端采用的是SpringBootMybatisSwagger2。 下面的话&#xff0c;我就做一个简单的Demo吧。 写的不好&#xff0c;请大家各位…

单表CURD操作

该项目纯粹用 Servlet 编写&#xff0c;理解跳转过程。理解原理..... 一、准备数据库脚本 USE test;DROP TABLE IF EXISTS dept;CREATE TABLE dept (deptno int(2) NOT NULL,dname varchar(14) DEFAULT NULL,loc varchar(13) DEFAULT NULL,PRIMARY KEY (DEPTNO) ) ENGINEInnoD…

Avue-curd个性化定制

在使用vue(js)elelment(ui)开发一些后台管理项目的时候&#xff0c;基本会用到 列表页&#xff0c;条件搜索(search),表格数据(table),分页&#xff0c;操作栏的&#xff0c;增、删、改、查几种操作。如下图这样的&#xff1a; 很多的页面都很类似&#xff0c;这里就给大家介绍…

Python简单CURD

python Python的注释模块 python变量 格式化输出 转义字符 与 数据类型 控制台输入 实体类 Student.dy class Emp:def __init__(self,id,name,age,sex,sal):self.id idself.name nameself.age ageself.sex sexself.sal saldef __str__(self):return "学号&#xf…

MySQL常用语句(CURD)

文章目录 一、数据库定义语言&#xff08;DDL&#xff09;1.1 库操作1.2 表操作 二、数据库操纵语言&#xff08;DML&#xff09;2.1 插入 insert2.2 修改 update2.3 删除 delete 三、数据库查询语言&#xff08;DQL&#xff09;3.1 单表查询①查询&#xff1a;select②条件&am…

SpringBoot实现CURD

SpringBoot实现CURD 项目列表 Pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

thinkphp curd 列表关联展现方式分享

在维护自己的开源框架中&#xff0c;针对后台列表模板&#xff0c;有时候我们需要在一键CURD的情况下&#xff0c;进行多个字段的关联显示&#xff0c;比如用户订单表里面存在user_id字段&#xff0c;那么在显示的时候&#xff0c;我们期望显示出用户的名称&#xff0c;而不是用…

mysql curd_mysql 基础之CURD

原文:mysql 基础之CURD 增删改查基本语法学习 增: insert Insert 3问: 1: 插入哪张表? 2: 插入哪几列? 3: 这几列分别插入什么值? Insert into TableName (列1,列2....列n) Values (值1,值2,....值n) 值 与 列,按顺序,一一对应 特殊: insert语句 允不允许不写列名 答:允许. …

小白入门:什么是CURD?

CRUD是CREATE、READ、UPDATE和DELETE的首字母缩写词&#xff0c;在数据库操作中频繁出现&#xff0c;本文针对小白&#xff0c;如果你已经是开发人员或者对数据库有一定认识的工程师可以默默离开了。让我直接走进CURD的世界。 为什么 CRUD 如此重要&#xff1f; CRUD 经常用于…

大龄焦虑?如何看待程序员35岁职业危机?

往期精选&#xff08;欢迎转发~~&#xff09; Java全套学习资料&#xff08;14W字&#xff09;&#xff0c;耗时半年整理 消息队列&#xff1a;从选型到原理&#xff0c;一文带你全部掌握 肝了一个月的ETCD&#xff0c;从Raft原理到实践 我肝了三个月&#xff0c;为你写出了…

Sitemesh前段框架基础

用sitemesh框架解决项目统一布局的解决方案 Sitemesh装饰框架 Sitemesh项目简介&#xff1a; Sitemesh是一个用来在jsp中实现页面布局和装饰&#xff08;layout and decoration&#xff09;的框架组件&#xff0c;能够帮助网站开发人员较容易实现页面中动态和静态装饰外观的分…

Sitemesh Demo

简介 sitemesh是一个网页布局与装饰体系,主要应用于创建具有大量一致性用户界面、导航与布局框架的站点。sitemesh拦截一切经过web server的静态或动态生成的HTML页面请求,处理页面内容,并将其与一个或多个装饰页面进行融合,生成最终页面。sitemesh也可用于构建由多个部分小…