网站对公司的意义,建筑工程承包方式,市场调研方案怎么写,wordpress添加广告功能Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP#xff08;JMXJsonServlet#xff09;获取指标接口调用方式GET查询的逻辑数据的来源#xff0c;以及更新的原理 架构
在…Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTPJMXJsonServlet获取指标接口调用方式GET查询的逻辑数据的来源以及更新的原理 架构
在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按下方列表顺序增加
全局源名称过滤在调用 getMetrics 时跳过任何名称匹配的指标源。每个指标槽名称过滤在调用 putMetrics 时跳过任何名称匹配的指标槽。每个指标源的记录过滤getMetrics 调用中的MetricsRecordImpl.getRecord()调用将跳过任何名称或标记值匹配的记录。每个指标槽的记录过滤在 putMetrics 调用中跳过任何名称或标签值匹配的记录。每个源的指标名称过滤getMetrics 调用中的 MetricsRecordBuilderImpl.add*()调用将跳过名称匹配的任何度量。每个槽的指标名称过滤在 putMetrics 调用中迭代 MetricsRecord时跳过任何名称匹配的度量。
JMX的应用
MetricsSystemMXBean实现JMX MBean接口以允许现有的JMX客户端(JConsole、jManage等)在运行时停止和启动指标系统或指标源。将实现JMX MBean接口以允许现有的JMX客户端(JConsole、jManage等)在运行时停止和启动度量系统。
使用场景 基于MXBean的MetricsSystemImpl主要是为了支持CompositeData类型的数据 基于DynamicMBean的MetricsSourceAdapter主要是为了重写getAttribute(String attribute), getAttributes(String[] attributes)和getMBeanInfo()方法。 基于StandardMBean的org.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);
指标项说明
官网说明
指标分类列表
JvmMetricsrpcRetryCache/NameNodeRetryCacheFairCallQueuerpcdetailednamenodeFSNamesystemJournalNodedatanodeFsVolumeRouterRPCMetricsStateStoreMetricsClusterMetricsQueueMetricsNodeManagerMetricsContainerMetricsUgiMetricsMetricsSystemStartupProgress
使用HTTPJMXJsonServlet获取指标
接口
接口类org.apache.hadoop.jmxJMXJsonServlet
接口地址
http://节点域名:webapp服务的port/jmxhttp://节点域名:webapp服务的port/jmx?getHadoop:serviceResourceManager,nameRMNMInfo
调用方式GET
查询的逻辑
创建MBean服务器。查询MBean服务器中注册的所有Mbean(指标信息)。根据条件过滤指标源Bean下的所有attribute信息不传入条件默认查询全部指标源beans。组织成json返回值。
数据的来源以及更新的原理
对应发现的三类JMX MBeans。
RMNMInfo去获取所有节点汇报的健康信息在调用Bean的成员方法时才回去查询最新的节点数据。MetricsSourceAdapter这类的动态MBeans在实现的时候重写了获取属性的方法都会去调用updateJmxCache()方法继而调用updateAttrCache和updateInfoCache方法将最新的指标信息构造成Bean的Attribute更新进JMX缓存中从而返回最新的指标属性值。MetricsSystemImpl其中的指标需要在开启指标系统且拥有sink的情况下数据才会进行更新主要的原因其更新指标的方法sampleMetrics(),依赖于调度线程调度的onTimerEvent()和即时发布指标方法publishMetricsNow()。这两个方法均要求sinks.size() 0才会指标采样更新。