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. NSGA,NSGA-II,Epsilon-MOEA,DE C语言Deb教授原版代码

    NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow ...

  2. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  3. Python - Django - 模板语言之 Tags(标签)

    标签使用 {% %} 注释语句:{# #} for 循环: views.py: from django.shortcuts import render, redirect, HttpResponse ...

  4. npm publish 一直报错 404

    在封装 zswui  react ui 组件库的时候,尝试了下 github的 packages 包设置,然后就给自己挖坑了. zswui   这是一个从零开始配置,实现组件开发测试的项目. 因为设置 ...

  5. linux信号量例子

    semaphore.h 提供的是 POSIX 标准定义的 semaphore 接口,而 sys/sem.h 里 提供的是符合 System V 标准的 semaphore接口 (semget, sem ...

  6. JS和vue文本框输入改变p标签的内容测试

    文本框输入,p标签的内容自动变成文本框的内容,如下是三种方法的测试: 方法1:JS里的onchange,当文本框内容改变事件,该事件里写的方法是,获取p标签本身,然后获取文本框的值,赋值给变量,最后给 ...

  7. Given a family tree, find out if two people are blood related

    Given a family tree for a few generations for the entire population and two people write a routine t ...

  8. windows系统中在jupyter安装虚拟环境内核

    一.在jupyter中安装虚拟环境内核 1.创建Python3虚拟环境 参考本文其他博客 2.进入虚拟环境 3.安装jupyter pip install jupyter 4.添加当前环境到jupyt ...

  9. Office 2010 经验总结

    1. 如何设置蓝底白字? 答:点击菜单项上的"页面布局"→"页面颜色",就可以选择喜欢的页面颜色,字体颜色也会跟着发生改变. 补充:如果不喜欢相应的页面颜色中系 ...

  10. 【转】 嵌入式C语言编程中Inline函数的应用

    源地址:https://blog.csdn.net/vigour1000/article/details/9622037 有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状 ...