YARN核心组件功能特性分析

2023-11-17

1、YARN Client
YARN Client 提交Application 到ResourceManager,它会首先创建一个Application上下文件对象,并设置ApplicationMaster必需的资源请求信息,然后提交到ResourceManager。YARN Client也可以ResourceManager通信,获取到一个已经提交并运行的Application的状态信息等。

2、ResoutceManager
管理者(主节点:做管理工作)+工作者(提供计算或者存储资源的,用来解决实际问题的)
ResourceManager上一个全局的资源管理器,集群只有一个,有SPOF问题,可以通过zookeeper实现HA机制,它主要负责整个系统的资源管理和分配,响应用户提交的不同类型应用程序的解析,调度,监控等工作,启动和监控ApplicationMaster,监控Nodemanger等。

整体职责解析

  • 处理客户端请求
  • 启动和监控ApplicationMaster
  • 监控Nodemanager
  • 负责资源的分配与调度

流程图如下:
在这里插入图片描述

所有这些Service都会经历三个步骤:

  • Service实例的创建,创建好了以后,放在CompositeService的serviceList这个成员变量集合中
  • 然后遍历这个ServiceList集合,取出每个service调用serviceInit()方法
  • 然后遍历这个ServiceList集合,取出每个service调用serviceStart()方法

关于上述图中ResourceManager的主要成员工作职责解析

  1. 用户交互模块
    ClientService:是为普通用户提供的服务,它会处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序,获取应用程序运行状态等。
    AdminService:YARN 为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令僵死,管理员可以通过这些接口管理集群,比如动态更新节点、列表、更新ACL列表,更新队列信息等。

  2. NodeManger管理
    NMLivelinessMonitor:监控NM是否活着,如果一个NodeManager在一定时间(默认10min)内未汇报心跳信息,则认为它死掉了,会将其从集群中移除。
    NodesListManager:维护正常节点和异常节点列表,管理exlude和include节点列表,这两个列表均上在配置文件中设置的,可以动态加载。
    ResourceTrackerService:处理来自NodeManger的请求,主要包括两种请求:注册和心跳,其中,注册上NodeManger启动时发生的行为,请求包中包含节点ID,可用的资源上限等信息,而心跳是周期性行为,包含各个container运行状态,运行的application列表、节点健康状况(可通过一个脚本设置),而ResourceTrackerService则为NM返回释放的Container列表、Application列表等。

  3. ApplicationMaster管理
    AMLiveLinessMonitor:监控AM是否活着,如果一个Applicationmaster在一定时间(默认10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被认为死亡,AM本身会被重新分配到另外一个节点上(用户可制定每个applicationMaster的尝试次数,默认上1次)执行。
    ApplicationMasterLauncher:与Nodemanager通信,要求它为某个应用程序启动ApplicationMaster。
    ApplicationMasterService:处理来自ApplicationMaster的请求,主要包括两种请求:注册和心跳,其中,注册上ApplicationMaster启动时发生的行为,包括请求包中包含的所有节点,RPC端口号和tracking URL等信息;而心跳是周期性行为,包含请求资源的类型描述、待释放的Container列表等,而AMS则为之返回新分配的Container、失败的container等信息。

  4. Application管理
    ApplicationACLsManager:管理应用程序访问权限,保护两部分权限,查看和修改,查看主要指查看应用程序基本信息,而修改则主要上修改应用程序优先级,杀死应用程序等。
    RMAppManager:管理应用程序的启动和关闭
    containerAllocationExpirer:YARN不允许AM获得Container后长时间不对其使用,因为这会降低整个集群的利用率,当AM收到RM新分配的一个Container后,必须在一定时间(默认为10min)内在对应用的NM上启动该Container,否则,RM会回收该Container。

3、ApplicationMaster

一个application运行在YARN之上:主控程序(AM:TL)+任务程序(Task)
应用程序管理器ApplicationMaster负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动MRAppMaster、监控MRAPPMaster运行状态并在失败时重新启动它等
整体职责解析:

  • 每个运行在YARN内部的Application都会启动一个ApplicationMaster,负责向ResourceManager注册Application和申请Container
  • ApplicationMaster就是运行在YARN集群中的NodeManager中,相比RMv1,不会对ResouceManager造成较大的负担
  • 负责整个应用程序的管理,跟NodeManager通信启动或者停止Task,监控/收集Task执行进度结果,或者进行Task的容错
    在这里插入图片描述

ResouceManager、ApplicationMaster、Task之间的关系

  • 客户端提交Job到ResouceManager,ResouceManager会为该Job启动一个ApplicationMaster来负责这个Job中的所有的Task的执行,所以ResouceManager负责管理ApplicationMaster
  • 启动的ApplicationMaster专门负责一个Job的所有的Task的启动,执行,生命周期管理,状态跟踪,容错等等

4、MRAPPMaster
MRAppMaster就是MapReduce的一个Application应用程序运行在YARN之上的ApplicationMaster。
MRAPPMaster负责管理MapReduce作业的生命周期,当客户端提交一个MapReduce Job到YARN的时候,ResouceManager会指派一个NodeManager来启动一个MRAPPMaster主控程序,来主持这个MapReduce Job的所有Task的执行。

5、Scheduler

YARN的资源调度服务:根据应用程序的需要的资源请求以及集群的资源情况,为应用程序分配对应的资源,他不会关系你申请到的Container资源去做什么。调度器就是根据容量、队列一些限制条件,将系统中的资源分配给各个正在运行的应用程序,调度器就是一个纯调度器,就是它只管资源分配,不参与具体应用程序相关的工作。
YARN内部有3种资源调度策略的实现:FIFOScheduler、FairScheduler、CapacityScheduler,其中默认是CapacityScheduler。

  • FIFOScheduler:先进先出,不考虑应用程序本身的优先级和资源使用情况
  • CapacityScheduler:将资源分成队列,共享集群资源但需要保证队列的最小资源使用需求
  • FairScheduler:公平的将资源分给应用,保证应用使用的资源是均衡的。

CapacityScheduler实现了资源更加细粒度的分配,可以设置多级队列,每个队列都有一定的容量,即对队列设置资源上限和下限,然后对每一级别队列分别再来用合适的调度策略进行调度

6、NodeManager

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

  • 管理自身的资源
  • 处理来自ResouceManager的命令
  • 处理来自ApplicationMaster的命令

在这里插入图片描述

所有这些Service都会经历三个步骤:

  • Service实例的创建,创建好了以后,放在CompositeService的serviceList这个成员变量集合中
  • 然后遍历这个ServiceList集合,取出每个service调用serviceInit()方法
  • 然后遍历这个ServiceList集合,取出每个service调用serviceStart()方法

7、Container

Flink Slot=YARN Container逻辑资源管理单位
Container容器是一个抽象出来的逻辑资源单位,Container容器是由ResouceManager Scheduler服务动态分配的资源构成,它包含了该节点上的一定量CPU、内存、磁盘、网络等信息,MapReduce程序的所有Task都是在一个容器里执行完成的,容器的大小是可以动态调整的。
一个NodeManager节点会运行多个Container,但一个Container不会跨节点,任何 一个Job或Application必须有运行在一个或多个Container中,在YARN框架中,ResouceManager只负责告诉ApplicationMaster哪些Container可以用,ApplicationMaster还需要去找NodeManager请求分配具体的Container。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YARN核心组件功能特性分析 的相关文章

随机推荐

  • Python中字符串中函数rfind()用法

    Python中字符串中函数rfind 用法 1 rfind 函数概述 rfind 用来在一个字符串中查找一个字符串的最后出现时的索引位置 2 语法 str rfind substr beg 0 end len string rfind 方法
  • Jlink使用技巧之合并烧写文件

    文章目录 前言 准备 创建工程 1 打开JFlash 2 创建新工程 3 选择芯片的型号 4 打开要合并的程序文件1 bootloader hex 5 打开要合并的程序文件2 app hex 6 保存合并后的文件 注意 JLink软件的下载
  • select函数详解

    select函数的功能和调用顺序 使用select函数可以完成非阻塞方式工作的程序 它能够监视我们需要监视的文件描述符的变化情况 读写或是异常 非阻塞方式 non block 就是进程或线程执行此函数时不必非要等待事件的发生 一旦执行肯定返
  • 安装计算机一级出现appcrash,电脑appcrash的问题怎么修复

    电脑是很复杂的程序代码设计的 因而有时会遇到一些奇怪的问题 而APPCRASH错误也是其中一种 如运行程序出现APPCRASH错误 我们在日志中查看事件名称为APPCRASH 这时很多朋友不知道怎么解决 下面小编和大家一起分享下修复这个问题
  • php服务不可用,ThinkPHP/Library/Vendor/Tcpdf/fonts/uni2cid_ak12.php · 白俊遥/thinkphp-bjyadmin - Gitee.com...

    unicode to cid conversion table is from ftp ftp oreilly com pub examples nutshell cjkv adobe cid2code txt in ak12 tar Z
  • SAP与 WebService接口的配置与调用

    SAP 能通过设置WebService与外部的webservice服务连接 1 进入事务 SE80 选择 Package 指定保存的开发包 如图 创建一个Enterprise Service 2 在弹出的下一个窗口中选择 URL HTTP
  • Unity2018打包图集(SpriteAtlas)以及使用

    将编辑器中Edit ProjectSettings Edit SpritePacker Mode设置为AlwaysEnabled Assets右键Create创建SpriteAtlas 将需要打包图集的图片文件夹选中 然后点击packpre
  • C语言:二分查找(折半查找),冒泡排序

    目录 一 二分查找 二分查找的需注意的细节 二 冒泡排序 冒泡排序需注意的细节 本篇博客详细讲解常用的几个方法 分别是二分查找和冒泡排序法 一 二分查找 二分查找 意思就是每次都分为两部分 将查找的数字和中间数字相比 判断大小后确定所查找数
  • ajax 填充下拉框,使用ajax填充下拉框--普通select

    1 与普通select有区别的是另一种带分组的select 2 带分组的select见另一篇 使用ajax填充下拉框 分组select 3 两者均使用ajax填充 数据来源于后台大哥 效果如下图 html 运营商 js callBack f
  • Centos 8.0中安装Redis服务器

    企业级开发中 经常需要把一些中间件安装在Linux服务上 主要考虑到linux服务器的性能吧 1 官网下载Linux版安装包 Redis 楼主使用的是 6 2 1 目前最新是6 2 6 差别不大 2 使用XShell 和Xftp连接Cent
  • 关于C++智能指针

    普通指针到智能指针的转换 int iPtr new int 42 shared ptr
  • Android Studio中的keystore

    跟着导师第一次做一个使用人数达到4位数的软件 软件提供了更新 结果在更新的时候发现 有的人显示的是已安装了存在签名冲突的同名数据包 不能安装 查了下发现是keystore的问题 直接用apk文件夹下的debug版本的apk放在服务器给他们安
  • JVM jmap命令

    作用 主要用来生成堆dump文件 C Users qianqian gt jmap h Usage jmap option
  • 为什么虚拟现实视频看上去那么粗糙?

    分辨率 Gear VR 可以支持超高分辨率 UHD 的播放 在像素方面 UHD视频每一帧有 3840 像素宽 x 1920 像素高的大小 视频经常播放 30 帧每秒 较低的分辨率也支持高帧率 Galaxy S6 手机显然是能够轻松地播放 4
  • docker内部sshfs

    container内部挂载前提 默认docker容器启动后无法通过sshfs挂载远程目录 可通过在构建container的时候添加 privileged 选项 挂载 sshfs xxx 111 111 111 11 remote dir l
  • Java实现飞机大战小游戏(一)

    day1 创建游戏窗口 1 设置背景图片 BaseFrame类 public class BaseFrame extends JFrame 设置窗体宽度和高度 public static int frameWidth 512 游戏界面宽度
  • cmake 提前结束处理命令: return

    有时候 我们有这样的需求 当处理到某个地方的时候 后面的我们都不想处理或者不需要处理的时候 就可以提前结束当前的处理逻辑 回到父级去处理 在C C 中 我们有break关键字跳出当前循环 continue关键字进入下一次循环 return关
  • 使用Redis作缓存时,怎么保证缓存和数据库的一致性?

    使用Redis作缓存时 怎么保证缓存和数据库的一致性 文章目录 使用Redis作缓存时 怎么保证缓存和数据库的一致性 1 先更新数据库 再更新缓存 2 先删缓存 再更新数据库 3 先更新数据库 再删缓存 其他造成缓存和数据库不一致的原因 方
  • 华为OD机试2022Q4【硬件产品销售方案】97%正确率

    200分的题目 对了97 题目记得不是很清楚了 给定一个amount 代表你这个企业拥有的钱 给定一行 代表一个工厂拥有的所有零件的价格 切库存无限量 例如 100 200 200 300 500 代表工厂有5种零件 每种零件单价为100
  • YARN核心组件功能特性分析

    1 YARN Client YARN Client 提交Application 到ResourceManager 它会首先创建一个Application上下文件对象 并设置ApplicationMaster必需的资源请求信息 然后提交到Re