目录

【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才会指标采样更新。
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
dengjiayue41 分钟前
消息队列(kafka 与 rocketMQ)
分布式·kafka·rocketmq
东阳马生架构2 小时前
zk基础—4.zk实现分布式功能二
分布式
ChinaRainbowSea3 小时前
8. RabbitMQ 消息队列 + 结合配合 Spring Boot 框架实现 “发布确认” 的功能
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
XF鸭3 小时前
在Hive中,将数据从一个表查询并插入到另一个表
数据仓库·hive·hadoop
IT成长日记3 小时前
【Kafka基础】Kafka高可用集群:2.8以下版本超详细部署指南,运维必看!
分布式·zookeeper·kafka·集群部署
互联网之声3 小时前
“清凉海岛·创享一夏” 海南启动旅游线路产品创意设计大赛
大数据·网络·旅游
码界筑梦坊4 小时前
基于Spark的酒店数据分析系统
大数据·分布式·python·信息可视化·spark·毕业设计·个性化推荐
山海不说话4 小时前
从零搭建微服务项目Pro(第7-1章——分布式雪花算法)
分布式·算法·spring·微服务·架构
掘金-我是哪吒4 小时前
分布式微服务系统架构第95集:基于 Redisson 延迟队列,springboot,springcloud启动过程,策略模式
spring boot·分布式·spring cloud·微服务·系统架构
郭涤生4 小时前
第九章:可靠通信_《凤凰架构:构建可靠的大型分布式系统》
笔记·分布式·架构·系统架构