【Hadoop实战】Hadoop指标系统V2分析

Hadoop指标系统V2分析

文章目录

架构

在Hadoop中基于JMX开发了Metrics2版本的指标系统。

源码包:org.apache.hadoop.metrics2

预备知识JMX。官方学习地址

主要组成部分

  • metrics sources :生产和更新指标的地方,提供了一个getMetris接口,用来获取指标值。
  • metrics sinks:汇集指标记录
  • metricsSystem :指标系统会定期轮询指标源,将指标记录汇集给指标sink。提供了一个putMetrics接口,用来接受指标记录。

类图

UML代码作图工具

PlantUML中文网

jetbrains IDEA plantuml插件主页

根据图表解释数据流向

指标数据的流向,由MetricsSystemImpl中的定时线程timer驱动,去调用每个MetricsSource适配器的getMetrics方法来采集每个指标源中的指标值,将指标数据写入对应的MetricsSink适配器中的SinkQueue队列中(半阻塞队列(生产者为非阻塞队列,消费者为阻塞队列),

当队列满时,新元素会被丢弃,以便在队列填充事件开始时保留 "有趣 "的元素。)。同时在每个MetricsSink适配器中都有一个sinkThread线程,用来消费SinkQueue队列中的指标数据,构造指标记录存储,存入对应的介质中。

指标过滤

支持三个级别的指标过滤,指标源级别,指标记录,指标名称。过滤的成本(内存和CPU)按下方列表顺序增加,

  1. 全局源名称过滤:在调用 getMetrics 时,跳过任何名称匹配的指标源。
  2. 每个指标槽名称过滤:在调用 putMetrics 时,跳过任何名称匹配的指标槽。
  3. 每个指标源的记录过滤:getMetrics 调用中的MetricsRecordImpl.getRecord()调用将跳过任何名称或标记值匹配的记录。
  4. 每个指标槽的记录过滤:在 putMetrics 调用中跳过任何名称或标签值匹配的记录。
  5. 每个源的指标名称过滤:getMetrics 调用中的 MetricsRecordBuilderImpl.add*()调用将跳过名称匹配的任何度量。
  6. 每个槽的指标名称过滤:在 putMetrics 调用中迭代 MetricsRecord时,跳过任何名称匹配的度量。

JMX的应用

MetricsSystemMXBean实现JMX MBean接口,以允许现有的JMX客户端(JConsole、jManage等)在运行时停止和启动指标系统或指标源。将实现JMX MBean接口,以允许现有的JMX客户端(JConsole、jManage等)在运行时停止和启动度量系统。

使用场景:

  1. 基于MXBeanMetricsSystemImpl,主要是为了支持CompositeData类型的数据

  2. 基于DynamicMBeanMetricsSourceAdapter,主要是为了重写getAttribute(String attribute), getAttributes(String[] attributes)getMBeanInfo()方法。

  3. 基于StandardMBeanorg.apache.hadoop.yarn.server.resourcemanager.RMNMInfo。从设计上看,这个简单的实现,没必要使用DynamicMBean那种复杂的实现。

JDK自带的MXBeans在包java .lang.management中,JVM指标使用到。

开启指标系统的组件

2.10.2版本可以开启指标系统的组件角色列表。即为指标命名中的服务名称。

  • WebAppProxyServer

  • SharedCacheManager

  • NodeManager

  • ApplicationHistoryServer

  • JobHistoryServer

  • MRAppMaster

  • SecondaryNameNode

  • DataNode

  • JournalNode

  • Router

  • NameNode

  • ResourceManager

指标系统启动的入口:DefaultMetricsSystem.initialize("服务名称"),如DefaultMetricsSystem.initialize("ResourceManager");

指标项说明

官网说明

指标分类列表:

  • JvmMetrics
  • rpc
  • RetryCache/NameNodeRetryCache
  • FairCallQueue
  • rpcdetailed
  • namenode
  • FSNamesystem
  • JournalNode
  • datanode
  • FsVolume
  • RouterRPCMetrics
  • StateStoreMetrics
  • ClusterMetrics
  • QueueMetrics
  • NodeManagerMetrics
  • ContainerMetrics
  • UgiMetrics
  • MetricsSystem
  • StartupProgress

使用HTTP(JMXJsonServlet)获取指标

接口

接口类org.apache.hadoop.jmxJMXJsonServlet

接口地址:

调用方式GET

查询的逻辑

  1. 创建MBean服务器。
  2. 查询MBean服务器中注册的所有Mbean(指标信息)。
  3. 根据条件过滤指标源Bean下的所有attribute信息,不传入条件默认查询全部指标源beans。
  4. 组织成json返回值。

数据的来源,以及更新的原理

对应发现的三类JMX MBeans。

  1. RMNMInfo,去获取所有节点汇报的健康信息,在调用MBean的成员方法时,才回去查询最新的节点数据。
  2. MetricsSourceAdapter,这类的动态MBeans在实现的时候,重写了获取属性的方法,都会去调用updateJmxCache()方法,继而调用updateAttrCacheupdateInfoCache方法,将最新的指标信息构造成Bean的Attribute更新进JMX缓存中,从而返回最新的指标属性值。
  3. MetricsSystemImpl,其中的指标需要在开启指标系统且拥有sink的情况下数据才会进行更新,主要的原因其更新指标的方法sampleMetrics(),依赖于调度线程调度的onTimerEvent()和即时发布指标方法publishMetricsNow()。这两个方法均要求sinks.size() > 0才会指标采样更新。
相关推荐
SirLancelot116 小时前
StarRocks-基本介绍(一)基本概念、特点、适用场景
大数据·数据库·数据仓库·sql·数据分析·database·数据库架构
阑梦清川16 小时前
es的docker部署和docker相关的可可视化面板工具介绍
大数据·elasticsearch·docker
Mr_LiYYD17 小时前
elasticsearch数据迁移
大数据·elasticsearch·搜索引擎
dalianwawatou18 小时前
GitLab 代码基础操作清单
大数据·elasticsearch·gitlab
Costrict18 小时前
解锁新阵地!CoStrict 现已支持 JetBrains 系列 IDE
大数据·ide·人工智能·深度学习·自然语言处理·ai编程·visual studio
爬山算法18 小时前
Redis(69)Redis分布式锁的优点和缺点是什么?
数据库·redis·分布式
阿里云大数据AI技术18 小时前
云栖实录|阿里云 Milvus:AI 时代的专业级向量数据库
大数据·人工智能·搜索引擎
随心............19 小时前
在开发过程中遇到问题如何解决,以及两个经典问题
hive·hadoop·spark
vivo互联网技术19 小时前
vivo HDFS EC 大规模落地实践
大数据·hdfs
QYResearch20 小时前
2025-2031年我国葡萄糖年产量和市场规模
大数据