【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才会指标采样更新。
相关推荐
DolphinScheduler社区32 分钟前
Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践
大数据
时差9531 小时前
MapReduce 的 Shuffle 过程
大数据·mapreduce
kakwooi3 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce
数新网络3 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
windy1a3 小时前
【c知道】Hadoop工作原理。
hadoop
P.H. Infinity5 小时前
【RabbitMQ】03-交换机
分布式·rabbitmq
龙哥·三年风水8 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统
昨天今天明天好多天8 小时前
【数据仓库】
大数据
油头少年_w8 小时前
大数据导论及分布式存储HadoopHDFS入门
大数据·hadoop·hdfs
Elastic 中国社区官方博客9 小时前
释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作
大数据·数据库·人工智能·elasticsearch·搜索引擎·自然语言处理