ResourceManager 的 rpc server 模型

一. yarn ResourceManager 的三种通信协议
  1. ResourceTrackerProtocol
    NodeManager 和 ResourceManager 的 RPC 通信协议。其中 ResourceManager 充当RPC Server的角色,而 NodeManager 充当 RPC Client 的角色。NodeManager 通过该协议向 ResourceManager 注册、汇报节点健康情况以及 container 的运行状态,并接收 ResourceManager 下达的重新初始化、清理 container 等命令。NodeManager 周期性主动向 ResourceManager 发送请求,并领取 ResourceManager 下达给自己的命令
  2. ApplicationMasterProtocol
    该协议中,ApplicationMaster 充当 RPC Client 角色,ResourceManager 充当RPC Server 的角色。应用程序的 ApplicationMaster 通过该协议向 角色,ResourceManager 注册、申请、释放资源
  3. ApplicationClientProtocol
    该协议中,应用程序的客户端充当RPC Client的角色,而 ResourceManager 充当 RPC Server 的角色。客户端通过该RPC协议向 ResourceManager 提交应用程序、控制应用程序(如杀死job)以及查询应用程序状态等。yarn rest api 对应的服务端用这个协议处理的。
二. ResourceManager 的用户交互服务

ResourceManager 会开启多总类型的服务,比如管理 NodeManager 的服务,管理 ApplicationMaster 的服务, 还有这里的用户交互服务。用户交互服务有3个:

  1. ClientRMService 负责普通用户交互
    ClientRMService相当于一个RPC Server,是为普通用户提供的服务, 它处理来自客户端各种RPC请求, 比如提交应用程序、 终止应用程序、 获取应用程序运行状态. 它实现了 ApplicationClientProtocol 协议。获取 yarn 中执行完成的任务列表接口 “http://ip:5004/ws/v1/cluster/apps”,就是该类的 getApplications 方法实现的

    public class ClientRMService extends AbstractService implementsApplicationClientProtocol {/*** Get applications matching the {@link GetApplicationsRequest}. If* caseSensitive is set to false, applicationTypes in* GetApplicationRequest are expected to be in all-lowercase*/@Overridepublic GetApplicationsResponse getApplications(GetApplicationsRequest request)throws YarnException {... ...// 从 rmContext 中获取应用列表, 该方法返回一个 ConcurrentMap<ApplicationId, RMApp>// 所以获取执行 app 列表的方法只会从 ResourceManager 的内存中获取,不会访问 hdfsfinal Map<ApplicationId, RMApp> apps = rmContext.getRMApps(); Iterator<RMApp> appsIter = apps.values().iterator();... ... }
    }
    

    yarn 的 rest api 都来自 WebServices 基类,它的其中一个子类 RMWebServices 负责接受 rest uri 的请求

    @Singleton
    @Path(RMWSConsts.RM_WEB_SERVICE_PATH)
    public class RMWebServices extends WebServices implements RMWebServiceProtocol {@GET@Path(RMWSConsts.APPS)@Produces({ MediaType.APPLICATION_JSON + "; " + JettyUtils.UTF_8, MediaType.APPLICATION_XML + "; " + JettyUtils.UTF_8 })@Overridepublic AppsInfo getApps(@Context HttpServletRequest hsr,@QueryParam(RMWSConsts.STATE) String stateQuery,@QueryParam(RMWSConsts.STATES) Set<String> statesQuery,@QueryParam(RMWSConsts.FINAL_STATUS) String finalStatusQuery,@QueryParam(RMWSConsts.USER) String userQuery,@QueryParam(RMWSConsts.QUEUE) String queueQuery,@QueryParam(RMWSConsts.LIMIT) String limit,@QueryParam(RMWSConsts.STARTED_TIME_BEGIN) String startedBegin,@QueryParam(RMWSConsts.STARTED_TIME_END) String startedEnd,@QueryParam(RMWSConsts.FINISHED_TIME_BEGIN) String finishBegin,@QueryParam(RMWSConsts.FINISHED_TIME_END) String finishEnd,@QueryParam(RMWSConsts.APPLICATION_TYPES) Set<String> applicationTypes,@QueryParam(RMWSConsts.APPLICATION_TAGS) Set<String> applicationTags,@QueryParam(RMWSConsts.NAME) String name,@QueryParam(RMWSConsts.DESELECTS) Set<String> unselectedFields) {... ...}
    }
    
  2. AdminService 负责和管理员用户交互

  3. WebApp 用来输出 web 页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kotlin 音频播放,需要 支持 多音轨同时播放 音频文件, 且支持设置播放速度帮我写一段代码。 要求在音频播放期间,可以设置播放速度

在Android中&#xff0c;SoundPool 主要用于播放短小的音频片段&#xff0c;如游戏音效&#xff0c;并且它并不直接支持设置播放速度&#xff08;播放速率&#xff09;。SoundPool 的 play 方法允许你调整播放的优先级和循环次数&#xff0c;但并不能直接调整播放速度。 然而&…

使用Puppeteer生成echarts图片

Puppeteer简介 Puppeteer 是一个用于控制 Headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供了一个高层次的 API&#xff0c;能够让你以编程方式操作浏览器&#xff0c;从而实现自动化任务&#xff0c;比如生成页面截图和 PDF、抓取网页内容、自动化表单提交、UI 测试…

快速测试 Mybatis 复杂SQL,无需启动 Spring

快速测试mybatis的sql 当我们写完sql后&#xff0c;我们需要测试下sql是否符合预期&#xff0c;在填入各种参数后能否正常工作&#xff0c;尤其是对于复杂的sql。 一般我们测试可能是如下的代码: 由于需要启动spring&#xff0c;当项目较大的时候启动速度很慢&#xff0c;有些…

Python 中的装饰器及其作用

装饰器是Python中一种特殊的语法&#xff0c;它允许在不修改原函数代码的情况下&#xff0c;对函数进行功能的扩展或修改。装饰器的作用可以理解为在函数执行前后添加额外的功能&#xff0c;比如日志记录、性能统计、缓存等。 装饰器的实现原理是通过将函数作为参数传递给装饰…

[Kubernetes] 容器运行时 Container Runtime

文章目录 1.容器运行时(Container Runtime)2.容器运行时接口3.容器运行时层级4.容器运行时比较5.强隔离容器6.K8S为何难以实现真正的多租户 1.容器运行时(Container Runtime) Container Runtime 是运行于 k8s 集群每个节点中&#xff0c;负责容器的整个生命周期。Docker 就目前…

Golang发送邮件如何验证身份?有哪些限制?

Golang发送邮件需要哪些库&#xff1f;怎么设置邮件发送的参数&#xff1f; 对于开发者而言&#xff0c;使用Golang发送邮件是一种常见需求。然而&#xff0c;在发送邮件的过程中&#xff0c;验证身份是一个至关重要的环节&#xff0c;它确保了邮件的可靠性和安全性。A将探讨G…

idea破解码激活码2024

下面2个是最新激活码&#xff0c;支持最新2024版本&#xff0c;大家按教程操作&#xff0c;就可以成功激活&#xff0c;正规激活码均有一定的时效性。 进入到IDE登陆页面&#xff0c;选择左下角“Proxy settings/代理设置”&#xff0c;如果没有这个选项&#xff0c;则说明版本…

【C++小知识】基于范围的for循环(C++11)

基于范围的for循环&#xff08;C11&#xff09; 范围for的引入范围for的使用条件 范围for的引入 int main(void) {int arr[] { 1,2,3,4,5,6,7,8,9 };int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i < sz; i){cout << arr[i] << " ";}retur…

bitset用法

参考:https://blog.csdn.net/weixin_45697774/article/details/105563993 题目:https://leetcode.cn/problems/maximum-total-reward-using-operations-ii/description/ class Solution { public:int maxTotalReward(vector<int>& rewardValues) {bitset<10000…

C语言刷题(函数)

一个数如果恰好等于它的所有因子(不包括它本身)之和&#xff0c;这个数就称为“完数”。编写程序按如下要求统计自然数1—100间完数的个数&#xff1a; //判断完数 #include <stdio.h> //完数判断函数 int isPerfect(int n) { int sum 0; for (int i 1; i <…

三极管十大品牌

三极管十大品牌-三极管品牌-晶体三极管哪个品牌好-Maigoo品牌榜

Python - 读取 mobi 电子书内容

文章目录 使用 mobi-reader 库安装使用 使用 mobi 库安装读取查看文件mobiunpack 命令行工具 相关库&#xff1a; mobi : https://github.com/iscc/mobimobi-reader &#xff1a; https://github.com/MrLucio/mobi-reader 使用 mobi-reader 库 安装 pip install mobi-reader…

我的创作纪念日-在SCDN的5年

机缘 五年前&#xff0c;一个偶然的机会让我接触到了SCDN这个充满活力和创造力的社区。我抱着对技术的热爱和对知识的渴望&#xff0c;决定在这里开启我的创作之旅。最初&#xff0c;我成为创作者的初心&#xff0c;是希望将自己在实战项目中的经验、日常学习过程中的点滴&…

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库系统中&#xff0c;B 树和 B 树是常见的索引结构&#xff0c;它们在存储和组织数据方面有着不同的设计…

SAS:coalescec函数和cmiss函数的应用及拓展

背景&#xff1a;CRF中收集了每个受试者3个RACE方面的信息&#xff0c;SDTM SPEC规定了RACE的生成规则为&#xff1a;若收集了多个RACE&#xff0c;RACE“MULTIPLE”&#xff0c;详细的RACE信息记录在SUPPDM中&#xff1b;若仅收集到一个RACE&#xff0c;则RACE等于RACE1-RACE3…

LabVIEW 用于 MES 系统和卡钳上位机检测

LabVIEW 确实可以用于制造执行系统&#xff08;MES&#xff09;的开发以及卡钳上位机检测。以下是详细说明&#xff1a; 使用 LabVIEW 开发 MES 系统 数据采集与处理&#xff1a;LabVIEW 擅长实时数据采集和处理&#xff0c;可以连接多种传感器和设备&#xff0c;获取生产线上…

探索JavaScript 18:新特性全解析

JavaScript&#xff0c;作为全球最广泛使用的编程语言之一&#xff0c;每年的更新都备受开发者社区的关注。2023年&#xff0c;JavaScript的新版标准——ECMAScript 2023&#xff08;也称为JavaScript 18&#xff09;引入了多项激动人心的新特性&#xff0c;这些特性不仅优化了…

PyTorch学习7:加载数据集

文章目录 前言一、epoch&#xff0c;batch-size和iteration二、示例1.说明2.代码示例 总结 前言 介绍PyTorch中加载数据集的相关操作。Dataset和DataLoader 一、epoch&#xff0c;batch-size和iteration epoch&#xff1a;所有训练数据完成一次前馈和反馈 batch-size&#x…

[大模型]Gemma-2B-Instruct FastApi 部署调用

环境准备 在 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换源加速下载…

Android AOSP定制去掉Google搜索栏

Android AOSP定制去掉Google搜索栏 1.前言&#xff1a; ​ 最近接触了Android系统定制的需求&#xff0c;感觉非常有意思&#xff0c;之前做过Launcher和串口&#xff0c;也自己安装过虚拟机&#xff0c;不过几年没用Linux系统了有点不习惯&#xff0c;Linux命令也不熟悉&…