YARN 组件

参考:Spark on Yarn | Spark,从入门到精通

YARN 采用 Master/Slave结构 ,包含ResourceManager 和 NodeManager
ResourceManager 是 Master;
NodeManager 是 Slave。

YARN的基本思想是将资源管理和作业调度/监视功能划分为单独的守护进程。
其实现为拥有一个全局ResourceManager (RM)和每个应用程序的ApplicationMaster (AM)。
应用程序可以是单个作业,也可以是一组作业。
从大体看,YARN的调度架构可以分为两层
第一层调度是ResourceManager 和 NodeManager;

第二层调度是 NodeManager 和 Container

通过采用双层调度结构将 Scheduler 管理的资源由细粒度的 (cpu、内存、磁盘、网络)变成了粗粒度的 Container,降低了负载。
在 App Manager 组件中也只需要管理 App Master,不需要管理任务调度执行的完整信息,同样降低了负载。通过降低 ResourceManager 的负载,变相地提高了集群的扩展性。
ResourceManager和NodeManager构成数据计算框架。ResourceManager是在系统中的所有应用程序之间仲裁资源的最终权威。NodeManager是每台机器的框架代理,负责监视containers的资源使用情况(cpu、内存、磁盘、网络),并向ResourceManager/Scheduler报告相同的情况。
每个应用程序ApplicationMaster实际上是一个特定于框架的库,它的任务是与ResourceManager协商资源,并与NodeManager一起执行和监视任务。
ResourceManager有两个主要组件:Scheduler和ApplicationsManager。

  • Scheduler
    Scheduler负责根据密集的容量、队列等约束将资源分配给各种正在运行的应用程序。
    Scheduler是纯粹调度器,因为它不执行对应用程序状态的监视或跟踪。
    此外,它也不能保证由于应用程序故障或硬件故障而重新启动失败的任务。
    Scheduler根据应用程序的资源需求执行调度功能;
    它是基于资源containers的抽象概念实现的,资源containers包含内存、cpu、磁盘、网络等元素。
  • ApplicationsManager
    ApplicationsManager负责接受作业提交,协商执行特定于应用程序的ApplicationMaster的第一个容器,并提供在出现故障时重新启动ApplicationMaster容器的服务。
    每个应用程序ApplicationMaster负责与调度程序协商适当的资源容器,跟踪它们的状态并监视进度。

Yarn 的运作流程

  1. Client 向 ResourceManager 的 App Manager 提交应用并请求一个 AppMaster 实例;
  2. App Manager 向 Scheduler 获取可以运行一个 Container 的 NodeManager
  3. Scheduler 返回一个可以运行一个 Container 的 NodeManager 给 App Manager
  4. App Manager 在返回对 NodeManager 上启动一个Container,并在这个Container上启动 App Master 实例
  5. App Master 向 App Manager注册
  6. 完成注册客户端就可以查询 ResourceManager 获得自己 App Master 的详情以及直接和 App Master 交互
  7. 根据交互情况 App Master 向 向App Manager 请求资源,即 Container
  8. App Manager 收到请求后从 Scheduler 获取到分配资源的信息 返回给 App Master 。
  9. App Master在对应的 NodeManager 上启动 Container 并执行 Task
  10. Container 执行过程中会把运行进度和状态等信息发送给 AppMaster
  11. Client 和 App Master 交流应用的运行状态、进度更新等信息
  12. 所有任务完后成 App Master 向 App Manager 取消注册然后关闭,同时所有的 Container 也归还给系统。

Scheduler 策略

Scheduler 策略 有下列几种:FIFO Scheduler、Capacity Scheduler、Fair Scheduler

  • FIFO Scheduler
    如果没有配置Scheduler 策略的话,所有的任务都提交到一个 default 队列,根据它们的提交顺序执行。
    如果资源充足执行任务,若资源紧张就等待前面的任务执行完毕后释放资源,这就是 FIFO Scheduler 先入先出的分配方式。
  • Capacity Scheduler
    Capacity Scheduler 是一种多租户、弹性的分配方式。
    支持多个队列,每个队列可配置一定量的资源,每个采用FIFO的方式调度。
    每个租户一个队列,每个队列可以配置能使用的资源上限与下限(如 50%,达到这个上限后即使其他的资源空置着,也不可使用),通过配置可以令队列至少有资源下限配置的资源可使用。
  • Fair Scheduler
    Fair Scheduler 是一种公平的分配方式,所谓的公平就是集群会尽可能地按配置的比例分配资源给队列。
    Job1 提交给队列 A,它占用了集群的所有资源。
    接着 Job2 提交给了队列 B,这时 Job1 就需要释放它的一半的资源给队列 A 中的 Job2 使用。
    接着 Job3 也提交给了队列 B,这个时候 Job2 如果还未执行完毕的话也必须释放一半的资源给 Job3。
    这就是公平的分配方式,在队列范围内所有任务享用到的资源都是均分的。

Yarn HA(容灾备援)

  1. Container 故障:Resource Manager 可以分配其他的 Container 继续执行
  2. App Master 故障:分配新的 Container,启动 App Master,新的 App Master 从 App Manager 获取相关恢复信息
  3. NodeManager 故障:移除这个节点,在其他的 NodeManager 重启继续任务。
  4. ResourceManager 故障:在 Yarn 集群中,ResourceManager 可以启动多台,只有其中一台是 active 状态的,其他都处于待命状态。
    这台 active 状态的 ResourceManager 执行的时候会向 ZooKeeper 集群写入它的状态;
    当它故障的时候这些 RM 首先选举出另外一台 leader 变为 active 状态,然后从 ZooKeeper 集群加载 ResourceManager 的状态;
    在转移的过程中它不接收新的 Job,转移完成后才接收新 Job。

YARN 原理简介的更多相关文章

  1. Zeppelin原理简介

    Zeppelin是一个基于Web的notebook,提供交互数据分析和可视化.后台支持接入多种数据处理引擎,如spark,hive等.支持多种语言: Scala(Apache Spark).Pytho ...

  2. 03 Yarn 原理介绍

    Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理   Hadoop的1.X架构的介绍   在1.x中的NameNodes只可能有一个,虽然可以通过Se ...

  3. storm 原理简介及单机版安装指南——详细版【转】

    storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...

  4. YARN学习笔记(一)——YARN的简介

    YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...

  5. Java进阶(二十四)Java List集合add与set方法原理简介

    Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...

  6. kafka原理简介并且与RabbitMQ的选择

    kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...

  7. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)

      上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢?   测试代码 p ...

  8. Nginx 负载均衡原理简介与负载均衡配置详解

    Nginx负载均衡原理简介与负载均衡配置详解   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...

  9. Nginx 反向代理工作原理简介与配置详解

    Nginx反向代理工作原理简介与配置详解   by:授客  QQ:1033553122   测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...

随机推荐

  1. net core静态文件 访问除默认目录文件配置

    在我们项目的实际应用中,不光是需要访问默认静态文件夹 wwwroot ,还有可能要要去访问除默认目录以外的文件夹,接下来我们进行配置 1.在根目录创建一个文件夹,继续创建它的子文件夹Images,在I ...

  2. MySQL主键跟外键

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...

  3. NX二次开发-UFUN打开选择文件夹对话框UF_UI_create_filebox

    #include <uf.h> #include <uf_ui.h> #include <string> using namespace std; string O ...

  4. NX二次开发-UFUN设置工程图PNG图片长度UF_DRF_set_image_width

    #include <uf.h> #include <uf_drf.h> UF_initialize(); //插入PNG char* file_name = "D:\ ...

  5. 禁用NX软件启动欢迎界面[转载]

    环境变量UGII_BACKGROUND_URL  NONE 转载自https://www.ugnx.net/wt/414

  6. NX二次开发-比较两个string是否相等

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); string A = "ABC&quo ...

  7. spring 配置bean以及配置依赖 (2)

    目录 一.使用ref引用其他对象 二.通过有参构造器创建对象 1 通过index精确定位参数顺序 三.引用bean 1 使用内部bean 2 使用list,set 3 声明集合类型 四.其他 1 使用 ...

  8. Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  9. 【工具原则】5W2H法学习笔记

    目录 问题描述 事件(原因)描述 任务描述 方案决策 小结 5W2H法又叫七问分析法,是二战中美国陆军兵器修理部首创.按事务构成要素,从规范的七个方面思考,避免疏忽遗漏. 可以应用在:问题描述.事件描 ...

  10. Java 中的 SPI 机制是什么鬼?高级 Java 必须掌握!

    作者:sigangjun blog.csdn.net/sigangjun/article/details/79071850 SPI的全名为:Service Provider Interface,大多数 ...