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. ...
随机推荐
- final、finally和finalized的区别?
(1)final:被final修饰的类,不被能继承:被final修饰的方法,不能被重写:被fianl修饰的量,为常量,只能被赋值一次: (2)finally:异常处理,和try.catch结合使用,可 ...
- 覆盖element ui 的样式
我们可以使用 !important 来覆盖element ui 的样式 首先先在浏览器中找到 我们所要修改的样式 ,然后找到她的 class 重新写他的样式 ,例如 . app { width ...
- 处理 vagrant Homestead 响应慢小记
环境 Homestead box: Homestead: v8.2.0 vagrant: 2.2.4 在Homestead中 安装nfs-kernel-server sudo apt-get inst ...
- CGLIB 详解
依赖 <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> ...
- C++ string的大小写转换【转载】
转载自https://www.cnblogs.com/balingybj/p/4678850.html 将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这 ...
- java-day03
判断语句if格式 if(关系表达式){ } if...else格式: if(关系表达式){ }else{ } if...else if格式: if(关系表达式){ }else if(关系表达式){ } ...
- 5.1_springboot2.x与安全(spring security)
1.简介 常见的两个安全框架shiro|spring security,这里只介绍spring security; Spring Security是针对Spring项目的安全框架,也是Spring B ...
- Vue项目中同级组件传值的例子
大家好,今天给大家带来Vue项目中同级组件之间传值的例子,父子组件之间的通信比较简单,这里不做讨论. 假设该项目中的需求如下: 图中左上角有一个按钮,我们的需求是点击它时,侧边导航栏收缩且主界面放大, ...
- 03、request 模块高级
requests高级部分 代理 cookie 验证码的识别 模拟登陆 代理 代理概念:代理服务器. 作用:接受请求==>请求转发. 代理和爬虫之间的关联: 可以使用请求转发的机制使得目的服务器接 ...
- 解决在python中进行CGI编程时无法响应的问题
问题:我期望的效果是,后端解析脚本后,将结果返回给我,而不是将代码返回给我或者是让我下载文件. 参考地址:https://blog.csdn.net/C_chuxin/article/details/ ...