运行在独立的节点上的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. public,protected,private辨析

    一直没有很清楚理解这三个修饰权限的区别,今天终于搞明白了,现总结如下: private:最严格的一个,子类无法继承,只有本类内部内访问,在其余类及子类中通过 "类名.方法" 去调用 ...

  2. Octopus系列之UploadValues异步上载

    不多说了直接上代码 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "tex ...

  3. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  4. iOS开发UI篇—无限轮播(功能完善)

    iOS开发UI篇—无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. [self addNSTimer]; } -(void)addNS ...

  5. Jmeter教程索引

    一.基础部分: 使用Jmeter进行http接口测试 Jmeter之Http Cookie Manager Jmeter之HTTP Request Defaults Jmeter之逻辑控制器(Logi ...

  6. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别

    初接触Hadoop技术的朋友肯定会对它体系下寄生的个个开源项目糊涂了,我敢保证Hive,Pig,HBase这些开源技术会把你搞的有些糊涂,不要紧糊涂的不止你一个,如某个菜鸟的帖子的疑问,when to ...

  7. python3+任务计划实现的人人影视网站自动签到

    python3+任务计划实现的人人影视网站自动签到 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到, 并且会自动添加一个windows 任务计划,这 ...

  8. Goldengate 12.2新特性-自描述的队列文件

    OGG12.2中最大的变化之一就是队列文件是自描述的,意思是不再担心以前版本中,表结构异构的情况,也不再需要defgen生成定义文件,以及不再使用assumeTargetDefs或SourceDefs ...

  9. iOS ShareSDK 使用

    流量精灵软件中,也在大部分地方使用到了shareSDK 这个三方开源库.具体的有两种需求 a.弹出所有分享模块 b.只弹出指定的平台:如微信朋友圈和QQ . 配置方法,三方库中也很详细,这里我只有写出 ...

  10. The Layout Process on Mac OSX and iOS

    First we will recap the steps it takes to bring views on screen with Auto Layout enabled. When you’r ...