ApplicationMaster管理部分主要由三个服务构成,分别是ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService,它们共同管理应用程序的ApplicationMaster的生命周期
 
ApplicationMasterLauncher、AMLivelinessMonitor和ApplicationMasterService这三个组件是如何协同管理ApplicationMaster生命周期,介绍从ResourceManager获得资源启动ApplicationMaster : 
  1. 用户向YARN ResourceManager提交应用程序,ResourceManager收到提交请求后,先向资源调度器申请用以启动ApplicationMaster的资源,待申请到资源后,再由ApplicationMasterLauncher与对应的NodeManager通信,从而启动应用程序的ApplicationMaster
  2. ApplicationMaster启动完成后,ApplicationMasterLauncher会通过事件的形式,将刚刚启动的ApplicationMaster注册到AMLivelinessMonitor,以启动心跳监控
  3. ApplicationMaster启动后,先向ApplicationMasterService注册,并将自己所在host、端口号等信息汇报给它
  4. ApplicationMaster运行过程中,周期性地向ApplicationMasterService汇报心跳信息
  5. ApplicationMasterService每次收到ApplicationMaster的心跳信息后,将通知AMLivelinessMonitor更新该应用程序的最近汇报心跳的时间
  6. 当应用程序运行完成后,ApplicationMaster向ApplicationMasterService发送请求,注销自己
  7. ApplicationMasterService收到注销请求后,标注应用程序运行状态为完成,同时通知AMLivelinessMonitor移除对它的心跳监控
介绍三个服务
 
(1) ApplicationMasterLauncher
 
ApplicationMasterLauncher即是一个服务,也是一个事件处理器,它处理AMLauncherEvent类型的事件,该类型事件有两种,分别是请求启动一个ApplicationMaster的"LAUNCH"事件和请求清理一个ApplicationMaster的"CLEANUP"事件。ApplicationMasterLauncher维护了一个线程池,从而能够尽快地处理这两种事件
  • 如果ApplicationMasterLauncher收到了"LAUNCH"类型的事件,它会与对应的NodeManager通信,要求它启动ApplicationMaster。整个过程比较简单,首先创建一个ContainerManagementProtocol协议的客户端,然后向对应的NodeManager发起连接请求,接着将启动AM所需的各种信息,包括启动命令、JAR包、环境变量等信息,封装成一个StartContainerRequest对象,然后通过RPC函数ContainerManagementProtocol#startContainer发送给对应的NM
  • 如果ApplicationMasterLauncher收到了"CLEANUP"类型的事件,它与对应的NodeManager通信,要求它杀死ApplicationMaster。整个过程与启动AM的过程类似
(2) AMLivelinessMonitor
 
该服务周期性遍历所有应用程序的ApplicationMaster,如果一个ApplicationMaster在一定时间内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被置为运行失败;如果AM运行失败,则由RM重新为它申请资源,以便能够重新分配到另外一个节点上执行
 
(3) ApplicationMasterService
 
ApplicationMasterService实现了RPC协议ApplicationMasterProtocol,负责处理来自ApplicationMaster的请求,请求主要包括注册、心跳和清理三种,其中,注册是ApplicationMaster启动时发生的行为,请求包中包含AM所在节点、RPC端口号和tracking URL等信息;心跳是周期性行为,包含请求资源的类型描述、待释放的Container列表等,而AMS为之返回新分配的Container、失败的Container等信息;清理是应用程序运行结束时发生的行为,ApplicationMaster向RM发送清理应用程序的请求,以回收资源和清理各种内存空间
 
ApplicationMasterLauncher启动AM后,AM做的第一件事是向RM注册,这是通过RPC函数ApplicationMasterProtocol#registerApplicationMaster实现的
 
AM运行过程中,需要周期性地通过RPC函数ApplicationMasterProtocol#allocate与RM通信,这主要有以下三个作用 : 
  • 请求资源
  • 获取新分配的资源
  • 形成周期性心跳,告诉RM自己还活着
 
AM运行结束后,需要通过RPC函数ApplicationMasterProtocol#finishApplicationMaster告诉RM自己运行结束,可以回收资源和清理各种数据结果了
 

 
NodeManager管理部分主要由三个服务构成,分别是NMLivelinessMonitor,NodesListManager和ResourceTrackerService,它们共同管理NodeManager的生命周期
 
介绍三个服务
 
(1) NMLivelinessMonitor
 
该服务周期性的遍历集群中所有NodeManager,如果一个NodeManager在一定时间内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被置为运行失败。需要注意的是,RM不会重新执行这些Container,它只会通过心跳机制告诉对应的AM,由AM决定是否重新执行。如果需要,则AM重新向RM申请资源,然后由AM与对应的NodeManager通信以重新运行失败的Container
 
(2) NodesListManager
 
NodesListManager管理exlude(类似于黑名单)和inlude(类似于白名单)节点列表,这两个列表所在的文件分别可通过yarn.resourcemanager.nodes.include-path和yarn.resourcemanager.nodes.exclude-path配置,其中,exlude节点列表可认为是黑名单,它们不允许直接与RM通信,而inlude节点列表可认为是白名单。默认情况下,这两个列表均为空,表示任何节点均被允许接入RM。需要注意的是,管理员可通过命令"bin/yarn rmadmin -refreshNodes"动态加载这两个文件
 
(3) ResourceTrackerService
 
ResourceTrackerService实现了RPC协议ResourceTracker,负责处理来自各个NodeManager的请求,请求主要包括注册和心跳两种,其中,注册是NodeManager启动时发生的行为,请求包中包含节点ID,可用的资源上限等信息;而心跳时周期性行为,包含各个Container运行状态,运行的Application列表,节点健康状况,而ResourceTrackerService则为NM返回待释放的Container列表、Application列表等
 
NM启动时,它所作的第一件事是向RM注册,这是通过RPC函数ResourceTracker#registerNodeManager实现的,注册信息包括节点可用资源总量,对外开放的HTTP端口号等
 
NM启动后,他会周期性地通过RPC函数ResourceTracker#nodeHeartbeat汇报心跳,心跳信息包含各个Container运行状态,运行的Application列表,节点健康状况等信息,而RM则为之返回需要释放的Container列表,Application列表等
 
我每天会写文章记录大数据技术学习之路,另外我自己整理了些大数据的学习资料,目前全部放在我的公众号"SmallBird技术分享",加入我们一起学习交流,并且回复'分享'会有大数据资源惊喜等着你~
 

ResourceManager学习之ApplicationMaster,NodeManager管理的更多相关文章

  1. ResourceManager学习之Application,状态机管理

    Application管理 YARN中,Application是指应用程序,他可能启动多个运行实例,每个运行实例由一个ApplicationMaster与一组该ApplicationMaster启动的 ...

  2. 蓝牙芯片NRF51822入门学习1:时间管理

    前言 之前辞职找工作的时候发现,很多公司希望招聘蓝牙技术方面的人才,所以干脆丢开LWIP静下心来学习蓝牙技术.原本以为一两星期能基本学会的,谁知道所选的蓝牙芯片nrf51822是个坑货,坑了我一个月. ...

  3. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  4. Linux学习之RPM包管理-yum管理(十七)

    Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...

  5. Linux学习之RPM包管理-rpm命令管理(十六)

    Linux学习之RPM包管理-rpm命令管理 目录 简介 RPM包依赖性 包全名与包名 rpm软件包安装 rpm软件包卸载 升级降级rpm软件包 rpm软件包的查询 rpm软件包校验 简介 RPM是R ...

  6. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  7. Linux第六周学习总结——进程额管理和进程的创建

    Linux第六周学习总结--进程额管理和进程的创建 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/cour ...

  8. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  9. Linux学习笔记(五) 账号管理

    1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...

随机推荐

  1. dockerfile中设置环境变量

    设置环境变量要用 ENV ENV JAVA_HOME /usr/local/jdk1.8.0_171 ENV PATH $JAVA_HOME/bin:$PATH 用 echo "JAVA_H ...

  2. 【KMP】POJ 2185 Milking Grid -- Next函数的应用

    题目链接:http://poj.org/problem?id=2185 题目大意:求一个二维的字符串矩阵的最小覆盖子矩阵,即这个最小覆盖子矩阵在二维空间上不断翻倍后能覆盖原始矩阵. 题目分析:next ...

  3. Win10安装Oracle Database 18c (18.3)

    下载链接:https://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html 我这里选择最新的 ...

  4. react——Table组件

    /* * 构建数据列 * */ tableColumns = (currentData) => { let group = lodashGroupBy(currentData, 'level1' ...

  5. React:快速上手(8)——前后端分离的跨域访问与会话保持

    React:快速上手(8)——前后端分离的跨域访问与会话保持 跨域访问 跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求http://www ...

  6. Java并发处理锁 Lock

    在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在 java.util.concurrent.locks 包下提供了另外一 ...

  7. 洛谷 题解 P2540 【斗地主增强版】

    [分析] 暴力搜顺子,贪心出散牌 为什么顺子要暴力? 玩过斗地主的都知道,并不是出越长的顺子越好,如果你有一组手牌,3,4,5,6,7,6,7,8,9,10,你一下把最长的出了去,你会单两张牌,不如出 ...

  8. 025 Android 带进度条的对话框(ProgressDialog)

    1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...

  9. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/  2018年3月27日  ...

  10. Linux基础-14-ssh服务、apache服务

    1. ssh服务 ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ssh服务端 ...