专栏首页SAMshare一起揭开 YARN 的神秘面纱

一起揭开 YARN 的神秘面纱

我们知道MapReduce1.0,是把计算框架和资源调度框架都弄在一起了,所以Master端的JobTracker会大包大揽去执行任务,存在很多问题,比如资源分配不均、单点故障会导致整个集群不可用、没办法集成多个不同的计算框架(比如Spark、Storm)。因此,YARN的设计思路就是把原先JobTracker的资源管理调度和监控的功能剥离出来,在YARN中实现,而MapReduce2.0仅仅就是做计算框架的事情。同时,YARN还可以兼容搭建多个不同的计算框架,实现同一个集群内资源和数据的共享。

YARN系统架构中有3个核心组件:ResourceManager、ApplicationMaster和NodeManager。

1. ResourceManager

一个全局的资源管理器,负责整个系统的资源调度,包含两个核心组件:Scheduler(调度器)和Application Manager(应用程序管理器)

  • Scheduler:接收来自ApplicationMaster的应用资源请求,把集群中的资源以 Container(容器)的方式分配下去。其中,Container作为动态资源分配单位,每个容器中会封装一定数量的CPU、内存资源;
  • Application Manager:负责系统中所有应用程序的管理,主要包括了应用程序的提交、与Scheduler的资源协商、启动ApplicationMaster、监控ApplicationMaster以及失败重启。

这个组件主要实现:

1)处理客户端请求

2)启动/监控 ApplicationMaster

3)监控 NodeManager

4)资源分配与调度

2. ApplicationMaster

主要负责任务调度、监控以及容错机制,为应用程序向ResourceManager申请,并在内部进行分配。

这个组件主要实现:

1)ResourceManager接收来自用户的作业需求,按照Job的上下文信息启动调度,为用户作业启动一个ApplicationMaster。

2)ApplicationMaster会根据用户作业,与ResourceManager协商获取资源,以容器形式从NodeManager请求获得。接着ApplicationMaster会将获取的资源,进一步在内部分配给各个task任务。

3)与NodeManager保持交互通信(程序状态、资源使用情况、进度等等)

4)定时向ResourceManager发送“心跳”信息,报告资源使用情况和进度

5)当作业完成时,ApplicationMaster向ResourceManager注销容器,发送请求到NodeManager去执行注销

3. NodeManager

驻留在一个YARN集群中每个节点上的代理。负责单个节点上的资源管理,处理来自于 ResourceManager和ApplicationMaster的命令。

这个组件主要实现:

1)负责容器生命周期管理

2)监控每个容器的资源(CPU/内存)使用情况

3)以“心跳”方式与ResourceManager保持通信

4)向ResourceManager汇报作业的资源使用情况以及每个容器的运行状态

5)跟踪节点的健康状态

6)接收来自ApplicationMaster的启动/停止容器的请求

4. YARN工作流程

YARN-打横看高清图

1、用户编写客户端应用程序向YARN提交;

2、YARN中的ResourceManager负责接收和处理来自客户端的请求,为应用分配一个容器,在容器中启动一个ApplicationMaster,并且在ResourceManager内注册;

3、ApplicationMaster采用轮询的方式向ResourceManager申请资源(Resource Scheduler);

4、ResourceManager以容器的形式向提出申请的ApplicationMaster分配资源;

5、在容器中启动任务(资源的二次分配);

6、各个任务向ApplicationMaster汇报自己的状态和进度;

7、应用程序运行完成后,ApplicationMaster向ResourceManager的Application Manager注销并关闭自己,释放资源。

Reference

  1. 林子雨-大数据技术原理与应用- B站视频 https://www.bilibili.com/video/BV1EE411x7wk?p=68

本文分享自微信公众号 - SAMshare(gh_8528ce7b7e80),作者:Samshare

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一起揭开 Kafka 的神秘面纱

    Kafka是由Servers(服务器)和Clients(客户端)组成的高吞吐量分布式发布订阅消息系统,可以部署在裸机、虚拟机以及云环境上。在我们接触的很多业务场...

    Sam Gor
  • 一起揭开 Hive 编程的神秘面纱

    Hadoop实现了一个特别的计算模型,就是MapReduce,可以将我们的计算任务分拆成多个小的计算单元,然后分配到家用或者服务器级别的硬件机器上,从而达到降低...

    Sam Gor
  • 一起揭开 PySpark 编程的神秘面纱

    Spark 是 UC Berkeley AMP lab 开发的一个集群计算的框架,类似于 Hadoop,但有很多的区别。最大的优化是让计算任务的中间结果可以存储...

    Sam Gor
  • 一起揭开 PySpark 编程的神秘面纱

    在开始讲解PySpark程序启动原理之前,我们先来了解一下Spark的一些概念和特性。

    Python数据科学
  • 揭开神秘的面纱

    打开f12检查页面后,刷新一下页面,点击Network,再点击下面的XHR,查看动态数据,会发现如下图所示,有两行数据。

    公众号guangcity
  • 让我们一起揭开算法的神秘面纱

    其实我一直想写一篇揭秘算法的文章,因为,据我所见,大多数写算法的软件工程师,其实,就是普通程序员,并非高人一等。

    Kiba518
  • 揭开NFV神秘的面纱

    网络功能虚拟化(NFV)的正确实现,还需一段时间的研究与发展,因为NFV不仅要实现自动化、融合于现有的管理系统中,还需要更加的轻便。 ? NFV能够采用简单易用...

    SDNLAB
  • 揭开 LVS 神秘的面纱

    耕耘实录
  • 揭开GANs的神秘面纱

    这篇文章中,作者通过将生成对抗网络(GANs,以下均简称GANs)运用到图片生成任务中向我们解释了其的原理。GANs是无监督学习中少有的成功的技术,一经提出,将...

    昱良
  • 揭开HTTPS的神秘面纱

    在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了,大家每天都在用,每一次HTTP请求,都是一次TCP连接。遗憾的是,请求的内容在TCP报文中是...

    烟草的香味
  • 揭开 Monad 的神秘面纱

    我们知道 Swift 语言支持函数式编程范式,所以函数式编程的一些概念近来比较火。有一些相对于OOP来说不太一样的概念,比如 Applicative, Func...

    JoeyBlue
  • 揭开 Kubernetes 的神秘面纱

    “容器”已成为最新的流行语之一。但是,这个词到底意味着什么呢?说起“容器”,人们通常会把它和 Docker 联系起来,Docker 是一个被定义为软件的标准化单...

    用户8639654
  • 揭开MySQL“锁”的神秘面纱

    在实验环境MySQL5.6、存储引擎:InnoDB中,揭开“锁”的神秘面纱,捋一捋我对这几个概念的想法

    孙玄@奈学教育
  • 揭开神经网络的神秘面纱

    未经训练的神经网络模型很像新生儿: 他们被创造出来的时候对世界一无所知(如果考虑到认识论理论的话),而且只有通过接触这个世界,也就是后天的知识,才会慢慢提高它们...

    商业新知
  • 一文揭开AI芯片的神秘面纱

    今天一朋友咨询我AI芯片怎么样?我是搞软件的,历来计算机系专业学生里搞软件的不懂硬件,但是要聊到AI芯片,它真的很简单,哈哈。

    用户1594945
  • 带你揭开WebSocket的神秘面纱!

    在揭开webSocket的神秘面纱之前,有言在先,我在写文章之前对webSocket一无所知,由于公司业务用到,故此研究记录一下,班门弄斧之处,请大佬批评指正...

    用户7413032
  • 一文揭开操作系统的神秘面纱

    在如今的世界里,绝大多数人都会对Windows,Linux及MacOS等操作系统有一定的使用经验,但是很多时候对操作系统本身并没有太多感知。毕竟与用户直接打交道...

    Bug开发工程师
  • 揭开「拓扑排序」的神秘面纱

    上篇文章 的投票让我有点无奈,大家是不是都商量好了?那就。。anyway 这篇先来拓扑排序~

    一个优秀的废人
  • 揭开JVM中TLAB中的神秘面纱

    在开始文章之前,我这里暂且认为大家已经明白了JVM创建对象分配内存地址的流程,也知道JVM内存划分。基于人道主义我还是放一张图吧,大家对照着看。

    一个程序员的成长

扫码关注云+社区

领取腾讯云代金券