运行在独立的节点上的ResourceManager和NodeManager一起组成了yarn的核心,构建了整个平台。ApplicationMaster和相应的container一起组成了一个Yarn的应用系统。

  ResourceManager提供应用程序的调度,每个应用程序由一个ApplicationMaster管理,以Container的形式请求每个任务的计算资源。Container由ResourceMangaer调度,由每个节点的NodeManager上进行本地的管理。

ResourceManager 组件

  弄了一个大大的ResourceManager,醒目吧哈哈- -,扯淡到此为止,ResourceManager是Master,仲裁集群所有的可用资源,从而帮助管理运行在Yarn平台上的分布式应用程序。与其他组建的协作包括:接收ApplicationMaster的资源请求,每个节点的NodeManager从ResourceManager中获取指令,管理单个节点上的可用资源。(ApplicationMaster的职责就是向ResourceManager申请资源并且和NodeManager一起工作、启动、监控和停止Container。

一、客户端和ResourceManager交互

  这里细说Client端的话,ResourceManager主要是通过Client Service、Admininistration Service、Application ACL Manager ResourceManager Web Application及Web Service组件与客户端交互。

  1、Client Service

  这个服务实现了基本的客户端ResourceManager的接口ApplicationClientProtocol.该组件处理所有来自客户端到ResourceManager的远程过程调用(RPC)通信。包括:应用程序提交、应用程序终止、获取应用程序,队列,集群统计,用户ACL及更多信息。在安全模式下,Client Service确保所来自用户的请求都已经认证过(比如通过Kerberos),对于不能直接通过Kerberos认证的客户端,ClientRMService也提供了API,包括ResourceManager代理令牌,代理令牌是Kerberos认证客户端的一种特殊对象,能够第一次安全的与ResourceManager通信并传递给它自己额非认证的进程。

  2、Administration Service

  既然Client Service是负责处理一般用户应用程序的提交或终止,为了确保管理员的请求不会被一般用户的请求饿死,提供了搞优先级的操作命令,这里就多分离出了一个接口供管理员使用。通过ResourceManagerAdministrationProtocol来实现的通信协议。包含的主要操作有:刷新队列重新分配队列或改变队列的属性刷新ResourceManager处理的节点列表,例如:增加新安装的节点或退役现有节点等。

  3、Application ACL Manager

  类似客户端和管理员等的请求这样面向用户的API,ResourceManager可以通过设置配置属性yarn.acl.enable为true来启动应用程序的ACL。查看访问的ACL决定谁可以通过RPC接口查看一些货所有应用程序的相关细节,WEB UI服务及WEB服务,修改的ACL决定着哪些用户可以"修改"应用程序(杀死程序等)

  当相同的ACL信息传递给ApplicationMaster,这样ApplicationMaster可以使用该信息让用户访问ApplicationMaster内部运行的一些服务,作为ContainerLaunchContext的一部分,当拉起一个容器时NodeManager也接收相同的ACL信息,然后使用它们控制针对应用程序/container的请求,主要包括它们的状态、应用日志等。

  4、ResourceManager Web Application 和 Web Service

  这个就是ResourceManager的一个web应用程序来输出集群的状态信息、指标、节点活跃列表等,指向ApplicationMaster Web接口的超链接及一个调度的专用接口。(就是我们在集群配置中加入的web.address)

二、应用程序与ResourceManager的通信

  一旦应用程序通过ResourceManager中的面向客户端的服务,它就会穿过ResourceManager的内部,负责拉起ApplicationMaster的状态机。主要包括以下几个通信方面:

  1、ApplicationMaster Service

  该组件相应所有来自ApplicationMaster的请求,实现了ApplicationMasterProtocol协议,这是ApplicationMaster与ResourceManager通信的唯一协议。主要包括以下任务:注册新的ApplicationMaster来自任意正在结束的ApplicationMaster的终止/取消注册请求认证来自不同ApplicaitonMaster的所有请求确保合法的ApplicationMaster发送的请求传递给ResourceManager中的应用程序对象、获取来自所有运行ApplicationMaster的Container的分配和释放请求、异步的转发给Yarn调度器.

  ApplicaitonMaster Service确保了任意时间点、任意ApplicaitionMaster只有一个线程可以发送请求给ResourceManager,因为在ResourceManager上所有来自ApplicaitonMaster的RPC请求都串行化了。

  2、ApplicationMaster 存活监控

  这个监控器跟踪每个ApplicationMaster以及它的最后的心跳时间。可在配置文件中配置时间,在配置时间内没有产生心跳的ApplicationMaster会被标记为死亡,ResourceManager会重新调度这个应用程序,在一个新的container上运行一个新的ApplicaitonMaster实例,默认情况下,最多允许两次这样的尝试。

三、节点和ResourceManager 通信

  下列是ResourceManager的组件和运行在集群节点上的NodeManager进行通信。

  1、ResourceManager Tracker Service

  NodeManager发送心跳给ResourceManager,ResourceManager的该组件负责相应来自所有节点的RPC。实现了ResourceTracker接口与所有NodeManager的通信。主要负责:注册新节点接收前面注册节点的心跳确保合法的节点可以和ResourceManager通信。Reource Tracker Service转发一个合法的心跳给YARN调度器,YARN调度器随后根据节点的空闲资源及不同应用程序的资源请求做调度决定。

  2、NodeManagers 存活监控

  为跟踪活跃的节点和确定已死的节点,该组件跟踪每一个节点的标识符(ID)和它最后的心跳时间。

  3、Nodes-List Manager

  是在ResourceManager内存中的一个集合,包括有效节点和被排除的节点。它也跟踪由管理员明确退役的节点。

ApplicationMaster 组件

  ApplicationMaster负责管理已提交的应用程序的集合。在应用程序提交后,首先检查其合法性,然后,确定没有其他已提交的应用程序已经使用相同的ID.该组件还负责记录和管理已结束的应用程序,过段时间才会从ResourceManager的内存中清除。

一、ApplicationMaster Launcher

  在Yarn中,每一个其他类型的Container的拉起都是由ApplicationMaster发起的,ApplicationMaster本身的Container是由ResourceManager申请,并在NodeManager上准备和拉起的。该组件维护一个线程池来设置环境,且和NodeManager通信来拉起新提交应用程序的ApplicationMaster,或者因为某些原因失败的先前应用程序实例所失败的ApplicationMaster。它也在以应用程序正常结束或者要强行终止时,负责告诉NodeManager来清理ApplicaitonMaster。(杀掉相应进程)

二、YarnScheduler

  Yarn调度器负责给正在运行的应用程序分配资源,这些应用程序受到容量、队列等各方面的限制。

三、ContainerAllocationExpirer

  该组件负责确保所有分配的Container最终被ApplicationMaster使用,并在相应的NodeManager上拉起。

NodeManager 组件

  NodeManager接受来自ApplicationMaster的启动或停止Container的请求,管理Container是NodeManager的核心功能。在真正拉起一个Container之前,NodeManager会将所有需要的库文件下载到本地,包括数据文件,可执行文件、tarball、JAR文件,shell脚本等待。这样下载好的库文件可以通过本地应用级别缓存被同一应用的多个Container共享

  NodeManager内部也可以划分为一些列嵌套组件,卧槽好多啊。。。

一、NodeStatusUpdater

  在NodeManager刚启动时,NodeStatusUpdater组件会向ResourceManager注册,发送本节点的可用资源,以及NodeManager的Web server和RPC Server的监听端口。ResourceManager在注册过程中,向NodeManager发出安全相关的key,NodeManager将用这个KEY作为ApplicationMaster的Container请求做认证。

二、ContainerManager

  是NodeManager的核心管理组件。其中也包含许多子组件:RPC Server资源本地化服务PUBLIC资源的本地化等等。

具体组件就不一一列举了。。。。太多了。。。。。。。

整个作业大体总体运行流程:

1、应用程序提交给ResourceManager。

2、ApplicationMaster启动,并向ResourceManager注册。

3、ApplicationMaster向ResourceManager请求Container执行实际的工作。

4、ApplicationMaster将从ResourceManager分配的Container信息(包括各种资源配置啊等信息)传递给NodeManager启动。

5、随之,计算过程在Container中进行,这些Container将与ApplicationMaster保持通信,发送心跳等告知任务过程。

6、当应用程序完成后,Container被停止,ApplicationMaster从ResourceManager中注销。

 

  

Hadoop on Yarn 各组件详细原理的更多相关文章

  1. Hadoop基础-Hdfs各个组件的运行原理介绍

    Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...

  2. Apache版本的Hadoop HA集群启动详细步骤【包括Zookeeper、HDFS HA、YARN HA、HBase HA】(图文详解)

    不多说,直接上干货! 1.先每台机器的zookeeper启动(bigdata-pro01.kfk.com.bigdata-pro02.kfk.com.bigdata-pro03.kfk.com) 2. ...

  3. 虚拟机centos7系统下安装hadoop ha和yarn ha(详细)

    一:基础环境准备 (一):虚拟机新建五个centos7系统(复制文件夹的方式) (二):角色分配 (三)按照角色分配表配置 (1)更改主机ip(自行查找),如果只是个人搭建玩一玩,可选择安装cento ...

  4. hadoop之yarn详解(基础架构篇)

    本文主要从yarn的基础架构和yarn的作业执行流程进行阐述 一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管 ...

  5. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  6. Hadoop和YARN :map+shuffle+reduce走读

    今天做了一个hadoop分享,总结下来,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等. v\:* {behavior:url(#default#VML);} o\:* ...

  7. hadoop中yarn

    一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善Map ...

  8. hadoop之yarn(优化篇)

    最近一直在学习hadoop的一些原理和优化,然后也做了一些实践,也有没有去做实践的,反正个人观点都记录下来 一.yarn的介绍 YARN的基本结构由一个ResourceManager与多个NodeMa ...

  9. Hadoop生态圈-Flume的组件之自定义Sink

    Hadoop生态圈-Flume的组件之自定义Sink 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍sink相关的API使用两个小案例,想要了解更多关于API的小技 ...

随机推荐

  1. Android文字跑马灯控件(文本自动滚动控件)

    最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...

  2. Windows Store App 偏移特效

    通过前面讲解的内容,读者已经了解了如何在三维空间中使旋转对象绕指定的旋转中心旋转一定的角度.接下来在这个基础上进一步讲解如何对旋转对象进行平移.下面首先介绍一下用到的几个属性. q  LocalOff ...

  3. 使用 Hive 作为 ETL 或 ELT 工具

    用来处理数据的 ETL 和 ELT 工具的概述 数据集成和数据管理技术已存在很长一段时间.提取.转换和加载(ETL)数据的工具已经改变了传统的数据库和数据仓库.现在,内存中转换 ETL 工具使得提取. ...

  4. My Game --线段数据

    在背景中用到了一个自定义的类 VectArr : class VectArr { public: VectArr( const Bezier & bz, int conut = 30 ) : ...

  5. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...

  6. Struts2中实现Web项目的初始化工作

    Struts2中实现Web项目的初始化工作 注:通常web系统在启动时需要做一些初始化的工作,比如初始化系统全局变量,加载自定义配置文件,启动定时任务等.  一.在Struts中实现系统的初始化工作 ...

  7. 电脑无法登陆ftp

    电脑无法登陆ftp,或者对于少数ftp能登陆,大多数不能登陆,用了一大堆ftp软件一样登陆不了.后来baidu了一下,发现是防火墙的问题.据说是Windows防火墙阻止了20/21端口的通信,说白了就 ...

  8. SAP 增强-出口选找方法-全部

    ■ SAP 中如何寻找增强 方法一:利用TCODE寻找增强(第二代的增强) 执行一个程序(源代码后附),在选择屏幕处输入你所需要增强的程序TCODE,执行後,就会出现一个列表,那里就有关于如何增强这个 ...

  9. logback配置错误邮件发送

    配置logback发送error级别日志到指定邮箱 需要导入jar包:janino.jar <property name="smtpHost" value="smt ...

  10. iOS下UITableView的单元格重用逻辑

    终于有时间继续UITableView的接口调用顺序这篇文章了,之前测试过,模拟器都是按照height,cellForRow这样的顺序调用接口的,iOS8以前一直是这样,但是到了iOS8,这个顺序倒过来 ...