YARN 原理简介
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 的运作流程

- Client 向 ResourceManager 的 App Manager 提交应用并请求一个 AppMaster 实例;
- App Manager 向 Scheduler 获取可以运行一个 Container 的 NodeManager
- Scheduler 返回一个可以运行一个 Container 的 NodeManager 给 App Manager
- App Manager 在返回对 NodeManager 上启动一个Container,并在这个Container上启动 App Master 实例
- App Master 向 App Manager注册
- 完成注册客户端就可以查询 ResourceManager 获得自己 App Master 的详情以及直接和 App Master 交互
- 根据交互情况 App Master 向 向App Manager 请求资源,即 Container
- App Manager 收到请求后从 Scheduler 获取到分配资源的信息 返回给 App Master 。
- App Master在对应的 NodeManager 上启动 Container 并执行 Task
- Container 执行过程中会把运行进度和状态等信息发送给 AppMaster
- Client 和 App Master 交流应用的运行状态、进度更新等信息
- 所有任务完后成 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(容灾备援)
- Container 故障:Resource Manager 可以分配其他的 Container 继续执行
- App Master 故障:分配新的 Container,启动 App Master,新的 App Master 从 App Manager 获取相关恢复信息
- NodeManager 故障:移除这个节点,在其他的 NodeManager 重启继续任务。
- ResourceManager 故障:在 Yarn 集群中,ResourceManager 可以启动多台,只有其中一台是 active 状态的,其他都处于待命状态。
这台 active 状态的 ResourceManager 执行的时候会向 ZooKeeper 集群写入它的状态;
当它故障的时候这些 RM 首先选举出另外一台 leader 变为 active 状态,然后从 ZooKeeper 集群加载 ResourceManager 的状态;
在转移的过程中它不接收新的 Job,转移完成后才接收新 Job。

YARN 原理简介的更多相关文章
- Zeppelin原理简介
Zeppelin是一个基于Web的notebook,提供交互数据分析和可视化.后台支持接入多种数据处理引擎,如spark,hive等.支持多种语言: Scala(Apache Spark).Pytho ...
- 03 Yarn 原理介绍
Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过Se ...
- storm 原理简介及单机版安装指南——详细版【转】
storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...
- YARN学习笔记(一)——YARN的简介
YARN的简介 什么是YARN MRv1的架构和缺陷 经典MapReduce的局限性 解决可伸缩性问题 YARN的架构 一个可运行任何分布式应用程序的集群 YARN中的应用程序提交 YARN的其他特性 ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 p ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
- Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...
随机推荐
- 10.Struts2值栈
1.什么是值栈 * 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据.从值栈中获取到数据. * ValueStack 是 struts2 提供一个接口,实现类 OgnlValueSta ...
- 解析Spring第三天(面向切面AOP)
面向切面:AOP 在不修改源代码的基础上,对方法进行增强.AOP的底层原理就是代理技术(第一种:jdk的动态代理(编写程序必须要有接口).第二种:cglib代理技术(生成类的子类).如果编写的程序有借 ...
- Spring Data之Example<>
简单CRUD之Example动态查询 简单介绍 (部分口水话,部分来自网络,代码永远自产) 使用过Spring全家桶的各位大佬应该都知道,Spring Data这个是Spring对持久层框架的封装,比 ...
- 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍
0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...
- LUOGU P1501 [国家集训队]Tree II (lct)
传送门 解题思路 \(lct\),比较模板的一道题,路径加和乘的维护标记与线段树\(2\)差不多,然后剩下就没啥了.但调了我将近一下午.. 代码 #include<iostream> #i ...
- NX二次开发-UFUN工程图插入PNG图片UF_DRF_create_image_from_file
#include <uf.h> #include <uf_drf.h> UF_initialize(); //插入PNG char* file_name = "D:\ ...
- 2018-2019-2-20175323 java实验三敏捷开发与XP实践
代码规范 安装alibaba插件 首先使用code栏里面的reformat code使代码的格式更加规范 再用编码规约扫描,alibaba把问题分为block/critical/major三个等级,出 ...
- bootstrap中container和container-fluid的区别
container和container-fluid 在bootstrap中,两者都是设置文本居中,但是它们还是有很大差别的 container 是随屏幕宽度的变化而变化的,是阶段性变化,有一个随浏览器 ...
- postman中如何传数组
方法一: postman的传参: java接收: package com.nps.base.xue.xd.groovyEngine import com.google.gson.Gson import ...
- libevent的使用 32位 64位
前段时间一个项目需要用到高并发的服务,想着自己应该可以写一个,windwos 上使用完成端口实现,写完之后,测试感觉没什么问题,可是一上线各种各样的问题,初步怀疑是底层网路库的问题,于是决定更换网络库 ...