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. 网络编程之TCP协议怎么使用?

    TCP 通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器会写的数据 表示客户端的类: java.net.Socket;此类实现客户端套接字.套接字是两台机器间通信的端点 套接字:包含了 ...

  2. Electron是个啥?

    于2013年作为构建Github上可编辑的文本编辑器Atom的框架而被开发出来 是目前开源开发者.初创企业和老牌公司常用的开发工具 是桌面应用框架 相当于一个浏览器的外壳,可以把网页程序嵌入到壳里面, ...

  3. jdk 动态代理和 cglib 动态代理

    原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载 ...

  4. prop不同数据类型设置默认值

    vue prop 会接收不同的数据类型,这里列出了 常用的数据类型的设置默认值的写法,其中包含: Number, String, Boolean, Array,  Function, Object   ...

  5. 3.RabbitMQ 第一个程序

    RabbitMQ消息服务器主要解决应用程序之间异步消息传输问题,传统的MQ分为点对点和主题与订阅,RabbitMQ使用Exchange(交换机)实现更加灵活的消息传递. 前面介绍过几个概念,Routi ...

  6. Java-javaFx库运用-自动弹跳的球

    (1)定义一个名为BallPane的类,用于显示一个弹动的球: (2)定义一个名为BounceBallControl的类,用来使用鼠标动作控制弹球,当鼠标按下的时候动画暂停,当鼠标释放的时候动画恢复执 ...

  7. LOG2_8BIT, LOG2_16BIT, LOG2_32BIT, LOG64_8BIT, LOG2

    #define LOG2_8BIT(v) (8 - 90/(((v)/4+14)|1) - 2/((v)/2+1)) #define LOG2_16BIT(v) (8*((v)>255) + L ...

  8. 如何查看jdk版本和路径

    cmd进入命令提示符,查看jdk版本,输入java -version;查看jdk路径 ,输入set java home.,这个也是默认路径

  9. 循环神经网络RNN

    转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...

  10. <后端>Flask框架

    1.Flask框架安装 简介:轻量级WEB框架,类似于简单版本的Django pip install flask 环境文件生成 pip freeze > requirement.txt 环境文件 ...