未加星标

hadoop-metrics2源码分析

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二05 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

hadoop-metrics2 其实是 hadoop-common 工具包中的一个小模块,它设计了一个完整的metrics使用方案,工作中正好用到了,这里从代码层面分析下其设计思路,并不会贴大段大段的代码

代码分析

hadoop-metrics2 的整个流程都被封装到了 MetricsSystem 中,随着这个类的启动,配置初始化->metrics生成->metrics投递的整个链路就串通了。

配置初始化

hadoop-metrics2 自己定义了一种配置,名字开头必须为 hadoop-metrics2 ,可以自定义尾缀,其中主要完成了 MetricsSource 和 MetricsSink 的一些配置,其中对 MetricsSink 有非常重的依赖,由于 hadoop-metrics2 将 MetricsSink 实现了插件化,而这种插件化是通过 SubsetConfiguration 完成初始化,所以这部分感觉使用起来并不是很灵活。

在 MetricsSystem 正式启动之前,会先通过 configure 的调用完成配置加载及初始化

metrics生成

所有被 hadoop-metrics2 管理的数据源必须实现 MetricsSource 接口:

public interfaceMetricsSource{ voidgetMetrics(MetricsCollector var1,booleanvar2); }

实现好接口之后,你需要将其 register 到 MetricsSystem 中,之后它会对 MetricsSource 进行简单的包装并管理起来

, MetricsSystem 启动之后会启动一个 Timer 定时器来周期性执行 Metircs 的流转,并且 MetricsSystem 中生成的 MetricsCollector 对象,会在各个 MetricsSource 之间传递。

由于之前注册过了 MetricsSource ,你的数据源就会在这时候被调用处理。

你可以在有数据变动的时候利用 MetricsCollector 来构造 MetricsRecordBuilder 并添加数据

这里再说一下 MutableMetric 和 MetricsRegistry 。

MetricsRegistry 用来管理 hadoop-metrics2 的几种基本类型的 Metircs ,如: Gauge , Couter , Stat 等,并且这些 Metircs 都继承自 MutableMetric 。

作为抽象父类的 MutableMetric 的方法 snapshot 很特别,他返回的是上一次的快照,并通过 changed 来判定是否发生数据变化,这样只需要在数据变动的时候投递 Metrics ,抽象类代码如下:

public abstract classMutableMetric{ private volatile boolean changed = true; publicabstractvoidsnapshot(MetricsRecordBuilder var1,booleanvar2); publicvoidsnapshot(MetricsRecordBuilder builder){ this.snapshot(builder, false); } protectedvoidsetChanged(){ this.changed = true; } protectedvoidclearChanged(){ this.changed = false; } publicbooleanchanged(){ return this.changed; } } metrics投递

在前面完成 Metrics 生成之后, MetricsSystem 会调用 publishMetrics 方法来完成数据投递。

这里 hadoop-metrics2 还做了点特别的工作。

一开始在完成配置加载后, MetricsSystem 对 MetricsSink 进行了包装,生成了 MetricsSinkAdapter ,这里主要是为了增加对 Metrics 的吞吐量的管理。

每一个 MetricsSinkAdapter 内部都有一个 SinkQueue 用于数据缓冲并添加了重试逻辑。

由于之前添加的Sink都实现了 MetricsSink 接口:

public interfaceMetricsSinkextendsMetricsPlugin{ voidputMetrics(MetricsRecord var1); voidflush(); }

在具体实现的 putMetrics 中你可以完成数据的具体操作,写文件也好,写DB也好,消息队列也好

总结

hadoop-metrics2 总体的设计思路很简洁,但是由于和 hadoop-common 绑定太死,会很笨重,尤其在包冲突问题上表现明显。

另外作为一个二方包,仅仅作为数据投递,感觉设计的还是略微繁琐切易用性不够。

考虑到 hadoop-metrics2 更多是为 hadoop 社区服务,可能初衷就没考虑通用性,加上其逻辑并不复杂,完全可以参考思路自己实现一套轻量的 Metrics 二方包。

这才是合理的造轮子。

本文数据库(综合)相关术语:系统安全软件

主题: 数据包装其实冲突社区服务
分页:12
转载请注明
本文标题:hadoop-metrics2源码分析
本站链接:http://www.codesec.net/view/523199.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(104)