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. Shell case in语句详解

    和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句 ...

  2. visual studio snippet备忘

    一.C++ classheadercpp.snippet <?xml version="1.0" encoding="utf-8"?> <Co ...

  3. 41. wait notify 方法

    wait()  等待,如果一个线程执行了wait方法,那么该线程就会进去一个以锁对象为标识符的线程池中等待 notity() 唤醒,如果一个线程执行了notity方法,那么就会唤醒以锁对象为标识符的线 ...

  4. (getElementBy**)与 querySelector(querySelectorAll) 的区别

    1. 通过类似于 document.getElementByTagName('div') 这种方式获取到的类数组,无法通过 forEach 进行遍历(可以通过for循环):而通过document.qu ...

  5. NX二次开发-算法篇-vector函数排序(例子:遍历所有点并排序)

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...

  6. C++之STL(标准模板库)

    STL:standard Template Lib 一.vector <1> 特点 <2> 常用函数: <3> 遍历方法: 1.for循环 2.迭代器 <4& ...

  7. 20140321 sizeof 虚函数与虚函数表 静态数组空间 动态数组空间 位字段

    1.静态的数组空间char a[10];sizeof 不能用于1:函数类型 2:动态的数组空间new3:位字段 函数类型:int fun();sizeof(fun())计算的是返回类型的大小,并不是函 ...

  8. mysql key分区,分区数制定

    我相信不 太注意的同学肯定会入坑,今天我差点也入坑了,后面自己问自己如果我用key分区,自己问自己 我的分区数应该是多少??? 后面我陷入了沉思......... 我第一次想先随便弄一个分区数,在本地 ...

  9. 史上最全Html和CSS布局技巧

      单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元 ...

  10. sql实现查询某个字段在哪个表里 及结构是什么

    ) --数据库名 ) set @dbname2='aab' select @str = ' SELECT 表名=d.name,字段名=a.name,序号=a.column_id, 标识=is_iden ...