前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Hadoop仿真】如何在仿真NodeManager中实现心跳

【Hadoop仿真】如何在仿真NodeManager中实现心跳

原创
作者头像
zeekling
发布于 2025-04-13 13:51:27
发布于 2025-04-13 13:51:27
470
举报

背景

Hadoop自带的hadoop-sls只能用于压测调度器,可在实际中影响ResourceManager性能的因素比较多,不能只看调度器。当前项目可构造海量的Fake NM节点,用于模拟线上RM的巨大压力场景,进行优化。首先需要对NM进行仿真。

仿真NodeManager

仿真NodeManager里面的主要功能如下:

  • 向RM注册NM。
  • 开启NM的RPC服务和HTTP服务。
  • 向RM发送心跳信息,以及处理NM中的Container信息。

注册NM

向RM注册NM,主要是调用ResourceTracker的registerNodeManager函数,主要需要下面信息:

  • http端口。
  • 当前NM节点的资源信息以及物理机资源信息。
  • 当前NM的节点ID,主要由当前节点的主机名以及rpc端口组成,格式为主机名:rpc端口。
  • 当前节点NM的版本信息。

核心代码如下:

代码语言:java
AI代码解释
复制
private void registerNodeManager() throws YarnException, IOException {
        RegisterNodeManagerRequest request = recordFactory.newRecordInstance(RegisterNodeManagerRequest.class);
        request.setHttpPort(httpPort);
        request.setResource(capability);
        request.setPhysicalResource(capability);
        request.setNodeId(this.nodeId);
        request.setNMVersion(YarnVersionInfo.getVersion());
        LOG.info("begin register NodeManager {} capacity={}, available={}, used={}", nodeId, this.capability, this.available, this.used);
        RegisterNodeManagerResponse response = resourceTracker.registerNodeManager(request);
        nmTokenMasterKey = response.getNMTokenMasterKey();
        LOG.info("Register NodeManager {}  success", nodeId);
    }

初始化RPC和http服务

根据当前Fake的主机名和rpc端口初始化rpc服务,主要实现ContainerManagementProtocol协议。

代码语言:java
AI代码解释
复制
private void initRpcServer(YarnConfiguration config, int port, String hostName) {
        YarnRPC rpc = YarnRPC.create(config);
        InetSocketAddress addr = NetUtils.createSocketAddr(hostName + ":" + port);
        NMTokenSecretManagerInNM tokenSecretManager = new NMTokenSecretManagerInNM();
        tokenSecretManager.setMasterKey(nmTokenMasterKey);
        Server server = rpc.getServer(ContainerManagementProtocol.class,
                this, addr, config, tokenSecretManager, 10);
        server.start();
        LOG.info("Init rpc {}:{} success", hostName, port);
    }

根据当前Fake的主机名和http端口初始化http服务,目前只显示NM的资源信息。

代码语言:java
AI代码解释
复制
private void initHttpServer(int port, String hostName) throws IOException {
        InetSocketAddress addr = NetUtils.createSocketAddr(hostName + ":" + port);
        HttpServer httpServer = HttpServer.create(addr, 0);
        httpServer.createContext("/", new NMHttpHandler(this));
        httpServer.setExecutor(Executors.newFixedThreadPool(2));
        httpServer.start();
    }

心跳

NM和RM之间的心跳是NM的核心功能,主要是调用ResourceTracker的nodeHeartbeat函数,主要需要下面参数:

  • NodeStatus信息:
    • 节点id。
    • NodeUtilization:当前节点的资源信息
    • ContainersUtilization:Container的资源信息。
    • ContainersStatuses:所有Container的状态信息。
    • 当前节点的状态信息:
      • 是否健康。
      • 健康状态,在健康模式下一般是Healthy,非健康模式下就是当前节点的异常信息。
      • 心跳的时间戳。
  • tokenSequenceNo:上次心跳返回的tokenSequenceNo
  • LastKnownNMTokenMasterKey:上次心跳返回的LastKnownNMTokenMasterKey
  • LastKnownContainerTokenMasterKey:上次心跳返回的LastKnownContainerTokenMasterKey

核心代码如下:

代码语言:java
AI代码解释
复制
NodeStatus nodeStatus = createNodeStatus(nodeId, getContainerStatuses(containers));
            nodeStatus.setResponseId(responseID);
            NodeHeartbeatRequest request = NodeHeartbeatRequest.newInstance(nodeStatus, nmTokenMasterKey, nmTokenMasterKey,
                    CommonNodeLabelsManager.EMPTY_NODELABEL_SET, null, null);
            request.setTokenSequenceNo(tokenSequenceNo);
            request.setLastKnownNMTokenMasterKey(nmTokenMasterKey);
            request.setLastKnownContainerTokenMasterKey(nmTokenMasterKey);
            NodeHeartbeatResponse response = resourceTracker.nodeHeartbeat(request);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
YARN任务运行中的Token
上一篇文章中,主要讲解了token的一些通用知识,以及hadoop中,token的实现和通用数据结构及流程。
陈猿解码
2023/02/28
9510
YARN任务运行中的Token
ResourceManager剖析
一:概述 1.1 ResourceManager基本职能 ResourceManager需通过两个RPC协议与NodeManager和ApplicationMaster交互,具体如下: ResourceTracker:NodeManager通过该RPC协议向ResourceManager注册、汇报节点健康状况和Container运行状态,并领取ResourceManager下达的命令,这些命令包括重新初始化、清理Container等,在该RPC协议中,NodeManager与ResourceMana
codingforfun
2018/08/24
7100
ResourceManager剖析
Hadoop-2.7.2分布式安装手册
当前版本的Hadoop已解决了hdfs、yarn和hbase等单点,并支持自动的主备切换。
一见
2019/03/14
2K0
编写一个直接在Yarn上运行的程序
我们知道基于mapReduce框架的分布式程序的编写,在这种框架下我们不需要考虑申请资源,只需要安照mapreduce框架的要求,直接编写Map函数和reduce函数即可。如何在Yarn上直接编写应用程序呢?
Tim在路上
2020/08/04
1.5K0
快速、安全、可靠!Yarn!| MTdata小讲堂
Yarn 的全称是 Yet Anther Resource Negotiator(另一种资源协商者)。它作为 Hadoop 的一个组件,官方对它的定义是一个工作调度和集群资源管理的框架。关于 Yarn 的发展历史我们在之前的文章曾介绍过,在这里就不赘述了。
美图数据技术团队
2018/09/18
5980
快速、安全、可靠!Yarn!| MTdata小讲堂
YARN资源调度系统介绍
申请资源->启动ApplicationMaster->申请运行任务的container->分发Task->运行Task->Task结束->回收container->待所有container运行结束->回收ApplicationMaster->应用运行完成
醉独醒
2022/08/02
1.4K0
Hadoop-2.8.0分布式安装手册
10.12.154.79: Error: JAVA_HOME is not set and could not be found.
一见
2018/08/02
3.3K0
如何编写一个YARN应用
在应用的提交流程中,是应用客户端将应用提交到 YARN ResourceManager。这可以通过设置YarnClient来完成。YarnClient启动后,客户端可以设置应用程序环境,准备好包含应用程序的第一个容器ApplicationMaster(AM),然后提交申请。您需要提供诸如应用程序运行所需的本地文件/jar 的详细信息、需要执行的实际命令(带有必要的命令行参数)、任何操作系统环境设置(可选)等信息等等。实际上,您需要描述需要为 ApplicationMaster 启动的 Unix 进程。
从大数据到人工智能
2023/02/13
1K0
进击大数据系列(五):Hadoop 统一资源管理和调度平台 YARN
Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善MapReduce的实现,但是它具有通用性,同样执行其他分布式计算模式。
民工哥
2023/08/22
1.3K0
进击大数据系列(五):Hadoop 统一资源管理和调度平台 YARN
手写一个 Mini Flink 分布式集群
已经很多天没有写文章了,直到我今天在飞机上看了一本书《如何成为一个不完美主义者》,让我重新认识了“完美主义”这四个字。
kk大数据
2021/07/09
9940
Hadoop-2.4.0分布式安装手册
本文的目的是为当前最新版本的Hadoop 2.4.0提供最为详细的安装说明,以帮助减少安装过程中遇到的困难,并对一些错误原因进行说明。本文的安装只涉及了hadoop-common、hadoop-hdfs、hadoop-mapreduce和hadoop-yarn,并不包含HBase、Hive和Pig等。
一见
2019/03/14
1.5K0
YARN学习基础
YARN是当前Hadoop中非常重要的一个组件,我们可以通过本文初步了解一下YARN。
拾荒者peanutchen
2020/02/03
7190
YARN学习基础
2.X版本的一个通病问题
对于配置了HA模式的RM或者NN,客户端如果向standby的节点发送请求,会因为不可连接或standby拒绝提供服务导致请求失败,转而向Active的节点发送请求,这个转换是hadoop客户端内部自动完成的,无须上层业务感知(本质上是向其中一个节点发送请求,如果失败则继续向另外一个节点发送请求)。
陈猿解码
2023/02/28
7950
2.X版本的一个通病问题
【大数据技术基础 | 实验十三】YARN实验:部署YARN集群
了解什么是YARN框架,如何搭建YARN分布式集群,并能够使用YARN集群提交一些简单的任务,理解YARN作为Hadoop生态中的资源管理器的意义。
Francek Chen
2025/01/22
2610
【大数据技术基础 | 实验十三】YARN实验:部署YARN集群
深入浅出学大数据(五)Hadoop再探讨High Availability(HA)集群搭建及YARN原理介绍
此系列主要为我的学弟学妹们所创作,在某些方面可能偏基础。如果读者感觉较为简单,还望见谅!如果文中出现错误,欢迎指正~ 本文主要介绍了Hadoop再探讨High Availability(HA)及YARN原理介绍,除此之外还有High Availability(HA)集群搭建的具体搭建过程。
不温卜火
2021/11/24
1.4K0
深入浅出学大数据(五)Hadoop再探讨High Availability(HA)集群搭建及YARN原理介绍
hadoop-2:深入探索hadoop3.3.1集群模式下的各个组件
https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions
千里行走
2021/08/12
1.9K0
hadoop-2:深入探索hadoop3.3.1集群模式下的各个组件
Hadoop总结篇之四---底层通信是怎么做到的
上一篇介绍了一个job的提交过程。期间多次提到通信协议。那么协议是什么? 协议其实就是通信的双方所遵守的一套规范,这套规范规定了通信时传输的数据的固定的格式。 4.1 RPC协议:在hadoop中,我们采用的是RPC协议。 该协议主要包含四个部分: 序列化层:协议中的参数采用Protocol Buffers来序列化/反序列化。 这个Protocol Buffers是一种数据存储格式,可以理解我们按照其语法格式定义一个数据结构类model,然后使用工具(Protocol Buffers编译器)编译为我们所使用
小端
2018/04/16
7880
Hadoop总结篇之四---底层通信是怎么做到的
yarn 学习笔记(对比 kubernetes 调度)
ApplicationMaster(AM),用户提交的每个应用程序都需要包含一个AM, 作用为:
王磊-字节跳动
2020/11/03
4.5K0
Hadoop YARN:调度性能优化实践
YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。
Python数据科学
2019/09/08
8150
Hadoop学习笔记(四)之YARN
之前,MapReduce 是 Master/Slave 结构,也就是集群中一个 Job Tracker 多个 Task Tracker 。 Job Tracker 负责资源管理和作业调度,Task Tracker 负责定期向 Job Tracker 报告节点的状态(节点死活,资源使用情况、任务执行情况)以及接收 Job Tracker 的命令来执行。不知你是否发现,问题就出现在这一个 Job Tracker 上,它挂掉,整个集群都完蛋。而且它由于负责了所有节点的RPC 请求,压力可想而知,也因此成为了节点规模扩大的瓶颈。最后一点便是集群仅支持 MapReduce,不支持其他计算框架。如果想使用 Spark 呢?对不起,再搭建一个集群,想使用 HBase 只能再搭建一个集群。这样的一堆集群既不好管理,又使得资源利用率极低(一段时间内这个集群忙,那个集群闲),同时跨集群的数据转移更是问题。于是乎,YARN 诞生了。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
小闫同学啊
2020/04/22
4870
Hadoop学习笔记(四)之YARN
相关推荐
YARN任务运行中的Token
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档